gpt4 book ai didi

c# - 只允许在 datagridview 单元格中输入一些字符

转载 作者:太空狗 更新时间:2023-10-29 23:26:21 25 4
gpt4 key购买 nike

有没有办法只让某些字符添加到 datagridview 单元格?比如“1234567890”?

最佳答案

据我所知,您可以使用两种方法。第一个(我认为最好的)是在 DataGridView 上使用 CellValidating 事件并检查输入的文本是否为数字。

下面是一个设置行错误值的示例(使用额外的 CellEndEdit 事件处理程序,以防用户取消编辑)。

private void dataGridView1_CellValidating(object sender,
DataGridViewCellValidatingEventArgs e)
{
string headerText =
dataGridView1.Columns[e.ColumnIndex].HeaderText;

// Abort validation if cell is not in the Age column.
if (!headerText.Equals("Age")) return;

int output;

// Confirm that the cell is an integer.
if (!int.TryParse(e.FormattedValue.ToString(), out output))
{
dataGridView1.Rows[e.RowIndex].ErrorText =
"Age must be numeric";
e.Cancel = true;
}

}

void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
// Clear the row error in case the user presses ESC.
dataGridView1.Rows[e.RowIndex].ErrorText = String.Empty;
}

第二种方法是使用 EditingControlShowing 事件并将事件附加到单元格的 KeyPress - 我不是这种方法的粉丝,因为它会默默地阻止非数字键的输入 - 虽然我想你可以提供一些反馈(如铃声响起)与其他方式相比,感觉工作量更大。

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
e.Control.KeyPress -= TextboxNumeric_KeyPress;
if ((int)(((System.Windows.Forms.DataGridView)(sender)).CurrentCell.ColumnIndex) == 1)
{
e.Control.KeyPress += TextboxNumeric_KeyPress;
}
}

private void TextboxNumeric_KeyPress(object sender, KeyPressEventArgs e)
{
bool nonNumberEntered = true;

if ((e.KeyChar >= 48 && e.KeyChar <= 57) || e.KeyChar == 8)
{
nonNumberEntered = false;
}

if (nonNumberEntered)
{
// Stop the character from being entered into the control since it is non-numerical.
e.Handled = true;
}
else
{
e.Handled = false;
}
}

一个重要的注意事项是小心删除编辑控件显示方法中控件上的事件处理程序。这很重要,因为 DataGridView 为相同类型的每个单元格重复使用相同的对象,包括跨不同的列。如果将事件处理程序附加到一个文本框列中的控件,则网格中的所有其他文本框单元格都将具有相同的处理程序!此外,将附加多个处理程序,每次显示一个控件。

第一个解决方案来自this MSDN article .第二个来自this blog .

关于c# - 只允许在 datagridview 单元格中输入一些字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5687670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com