我有以下代码限制用户只在文本框中键入数字。
我如何使用输入的数值来过滤数据网格中的行( dataGridView1 ),方法是将 driverNo 文本框中的内容与在 DriverNo 列中?
到目前为止,这是我的代码:
private void driverNo_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
}
答案 0 :(得分:1)
您可以使用此代码隐藏文本框中包含该编号的所有行(让我们称之为textBox1
)。
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Cells["driverNo"].Value != null
&& row.Cells["driverNo"].Value.ToString() == textBox1.Text)
{
row.Visible = false;
}
}
请注意,如果DataGridView
与DataSet绑定,则首先需要暂停数据绑定。
修改强>
如果您希望在用户输入(动态)时进行过滤,则可以将此代码附加到KeyUp
事件:
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Cells["driverNo"].Value != null
&& row.Cells["driverNo"].Value.ToString() == textBox1.Text)
{
row.Visible = false;
}
else
{
row.Visible = true;
}
}
}
您可以使用查找或哈希表优化此代码以消除循环。但这基本上工作正常(没有在大数据网格上测试)。