隐藏与driverNo.Text不匹配的所有行

时间:2013-12-11 18:58:34

标签: c# winforms datagrid

我想隐藏datagrid中与 driverNo.Text 中的文本不匹配的所有行,但是当 driverNo.Text 为null时,我想要所有数据网格中的行将出现。我该如何做到这一点?

    private void driverNo_KeyUp(object sender, KeyEventArgs e)
    {
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            if (row.Cells[1].Value.ToString() == driverNo.Text)
            {

            }
            else if (row.Cells[1].Value.ToString() == null)
            {

            }
        }
    }

2 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

CurrencyManager manager = (CurrencyManager)BindingContext[dataGridView1.DataSource];
manager.SuspendBinding();
bool shouldNotFilter = string.IsNullOrEmpty(driverNo.Text);
foreach (DataGridViewRow row in dataGridView1.Rows)
{
    if (shouldNotFilter)
    {
        row.Visible = true;
    }
    else
    {
        if (!string.Equals(row.Cells[1].Value.ToString(), driverNo.Text, StringComparison.OrdinalIgnoreCase))
        {
            row.Visible = false;
        }
        else
        {
            row.Visible = true;
        }
    }
}
manager.ResumeBinding();

这种方法很简单但很慢,我建议你看一下DataView及其RowFilter属性。 Here就是一个很好的例子。

答案 1 :(得分:0)

这可能不完全是你所需要的,但这些是什么?

private void driverNo_KeyUp(object sender, KeyEventArgs e)
{
    // Set all rows.Visible = false in design
    if (driverNo.Text = "")
    {
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            row.Visible = true;
        }
    }
    else
    {
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            if (row.Cells[1].Value.ToString() == driverNo.Text)
            {
                row.Visible = true;
            }
        }
    }
}

如果driverNo.Text为null,这将使所有行可见,否则只显示driverNo.Text中包含的行。

注意:开始时无需显示行,或者您可以将其显示为开始,只需将if语句更改为!= driverNo.Text并设置为false