如何使用textbox过滤到没有数据源的datagridview

时间:2012-11-15 16:46:15

标签: c# winforms datagridview filter

与此处相同的问题: question

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

5 个答案:

答案 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