按键按下datagridview中的行

时间:2013-12-11 15:26:07

标签: c# winforms datagridview

我有以下代码限制用户只在文本框中键入数字。

我如何使用输入的数值来过滤数据网格中的行( dataGridView1 ),方法是将 driverNo 文本框中的内容与在 DriverNo 列中?

到目前为止,这是我的代码:

private void driverNo_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
    {
        e.Handled = true;
    }
}

1 个答案:

答案 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;
        }
    }
}

您可以使用查找或哈希表优化此代码以消除循环。但这基本上工作正常(没有在大数据网格上测试)。