过滤数据网格视图

时间:2018-02-22 19:28:44

标签: c# datagridview

DataTable dt = new DataTable();
private void txtSearch_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Return)

        {
            DataView dv = dt.DefaultView;
            dv.RowFilter = string.Format("Description LIKE '%{0}%' OR Manufacturer LIKE '%{0}%' OR ManufacturerItemNumber LIKE '%{0}%' OR ItemNumber LIKE '%{0}%'", txtSearch.Text);
                dataGridView.DataSource = dv;                   
                dataGridView.Update();
                dataGridView.Refresh();
        }

    }

首先我连接到我的sql数据库,显示所有记录。然后我运行此代码。当我在文本框中输入内容时效果很好。但是我想通过添加额外的文本框来缩小过滤结果的范围。使用第二个文本框我想从第一个文本框中过滤我过滤的数据。

private void Descrip_txtbox_KeyDown(object sender, KeyEventArgs e)
    {
        DataView dv = dt.DefaultView;
        dt = dv.ToTable();

        if (e.KeyCode == Keys.Return)
        {       
         dv.RowFilter = string.Format("Description LIKE '%{0}%' OR Manufacturer LIKE '%{0}%' OR ManufacturerItemNumber LIKE '%{0}%' OR ItemNumber LIKE '%{0}%'", Descrip_txtbox.Text);
        dataGridView.DataSource = dv

}

我想从txtsearch文本框中获取第一次搜索的过滤数据,然后使用下一个文本框再过滤,依此类推。

有人可以帮帮我吗? 谢谢。

2 个答案:

答案 0 :(得分:0)

假设您想要一个AND过滤器,它将如下所示:

DataView dv = ((DataView)dataGridView.DataSource);  

var secondFilter = string.Format("Description LIKE '%{0}%' OR Manufacturer LIKE '%{0}%' OR ManufacturerItemNumber LIKE '%{0}%' OR ItemNumber LIKE '%{0}%'", Descrip_txtbox.Text);

if ( dv.RowFilter == null || dv.RowFilter.Length == 0 )
    dv.RowFilter = secondFilter;
else
    dv.RowFilter = "(" + dv.RowFilter & ") AND " + secondFilter;

dataGridView.DataSource = dv;

括号和AND是必需的,因为您希望进一步细化过滤器,否则添加OR可能会导致包含更多记录。

答案 1 :(得分:0)

正在发生的事情是您要将新value分配给dv.RowFilter,这将清除之前的过滤器。

您可以使用AND连接新的过滤器,例如:

dv.RowFilter += " AND " + string.Format("Description LIKE '%{0}%' OR Manufacturer LIKE '%{0}%' OR ManufacturerItemNumber LIKE '%{0}%' OR ItemNumber LIKE '%{0}%'", Descrip_txtbox.Text);