1

与此处相同的问题: 问题

但就我而言,我的 dataGridView1.DataSource 为空。我使用 dataGridView1.Rows.Add 函数向表中添加行。是否可以使用没有DataSource的文本框添加过滤器dataGridView的列?

4

5 回答 5

1

或者您可以使用以下代码:

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;
                }
            }
于 2018-02-01T07:40:32.703 回答
0

可以过滤没有数据源的数据网格,但我怀疑不是。

无论如何,一个更简单的解决方案是只给网格一个数据源。而不是以编程方式将行添加到数据网格,而是创建一个DataTable并向其添加行,然后将网格的数据源设置为该表。现在您可以使用标准过滤方法。

于 2012-11-15T16:53:19.437 回答
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+"'";
于 2018-02-01T07:36:32.320 回答
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; });

        }
于 2018-07-24T06:32:12.647 回答
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
于 2021-07-01T01:20:10.070 回答