我想隐藏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)
{
}
}
}
答案 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