与此处相同的问题: question
但在我的情况下,我的dataGridView1.DataSource为null。 我使用dataGridView1.Rows.Add函数向表中添加行。 是否可以使用没有DataSource的文本框添加过滤器dataGridView列?
答案 0 :(得分:1)
可能有可能过滤没有数据源的数据网格,但我怀疑它不是。
无论如何,更简单的解决方案是给网格一个数据源。而不是以编程方式向数据网格添加行,而是创建DataTable
并向其添加行,然后将网格的数据源设置为该表。现在您可以使用标准过滤方法。
答案 1 :(得分:0)
将行添加到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+"'";
答案 2 :(得分:0)
或者您可以使用此代码:
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;
}
}
答案 3 :(得分:0)
您也可以尝试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; });
}
答案 4 :(得分:0)
@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