与此处相同的问题: 问题
但就我而言,我的 dataGridView1.DataSource 为空。我使用 dataGridView1.Rows.Add 函数向表中添加行。是否可以使用没有DataSource的文本框添加过滤器dataGridView的列?
与此处相同的问题: 问题
但就我而言,我的 dataGridView1.DataSource 为空。我使用 dataGridView1.Rows.Add 函数向表中添加行。是否可以使用没有DataSource的文本框添加过滤器dataGridView的列?
或者您可以使用以下代码:
if (textBox1.Text != string.Empty)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Cells[column_index].ToString().Trim().Contains(textBox1.Text.Trim()))
{
row.Visible = true;
}
else
row.Visible = false;
}
}
可以过滤没有数据源的数据网格,但我怀疑不是。
无论如何,一个更简单的解决方案是只给网格一个数据源。而不是以编程方式将行添加到数据网格,而是创建一个DataTable
并向其添加行,然后将网格的数据源设置为该表。现在您可以使用标准过滤方法。
向datagridview添加行,创建一个DataTable
并向其添加行并将其绑定到datagridview。现在您可以使用 TextBox 进行搜索。
DataTable table = new DataTable();
table.Columns.Add("Column_Name1", typeof(String));
table.Columns.Add("Column_Name2", typeof(String));
......
foreach (var element in list)
table.Rows.Add(element.Column_Name1, element.Column_Name2, ...);
dataGridView1.DataSource = table;
table.DefaultView.RowFilter = "Column_Name1 Like '"+TextBox.Text+"'";
你也可以试试 linq
private void filter()
{
if (this.txtsearch.Text != string.Empty)
this.dataGridView1.Rows.OfType<DataGridViewRow>().Where(r => r.Cells["column_name"].Value.ToString() == this.txtsearch.Text.Trim()).ToList().ForEach(row => { if (!row.IsNewRow) row.Visible = false; });
else
this.dataGridView1.Rows.OfType<DataGridViewRow>().ToList().ForEach(row => { if (!row.IsNewRow) row.Visible = true; });
}
@Rakesh Roa M 所做的很好,但我更进一步,首先让它在 VB.NET 中工作,而且它不区分大小写。和你一样,我也在以编程方式添加内容。如果由于效率低下而在 DataGridView 上有数千个条目,这当然不是最好的方法,但如果记录集有数百个,这应该可以正常工作。
If TextBox1.Text IsNot String.Empty Then
For Each row As DataGridViewRow In DataGridView1.Rows
If row.Cells("your_column_name").Value.ToString().ToUpper().Contains(TextBox_filter.Text.ToUpper().Trim()) Then
row.Visible = True
Else
row.Visible = False
End If
Next
End If