过滤datagridview行

时间:2012-05-11 00:11:23

标签: c# text datagridview filter

您好我有一个datagridview,它已经添加了很多行。我还有一个文本框,如果它们不匹配,我想从datagridview行中过滤掉这些行。我想以某种方式将文本框连接到列以显示和隐藏行。该表填充使用:

public void readExcelFile()
{
    string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = " + Properties.Settings.Default.excelFilePath + "; Extended Properties = \"Excel 8.0;HDR=Yes;IMEX=1\";";

    string query = String.Format("select * from [{0}$]", "Batch Export");

    OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString);

    DataSet dataSet = new DataSet();
    dataAdapter.Fill(dataSet);

    resultsGrid.DataSource = dataSet.Tables[0];                
}

现在,当我开始在文本框中键入“John”并且第一列是“Name”时,我想要删除名称单元格不以“J”开头的所有行,然后是“Jo”等等。字符,我希望行回来。这可能吗?我在对数据库使用SQL查询之前已经完成了这个,但是这个来源是不同的。而且我必须清除每个textChanged事件的表格。这里有大约20k行。

2 个答案:

答案 0 :(得分:1)

在将Table分配给resultGrid.DataSource之前,您可以使用DataTable.Select:

var strExpr = "CustomerFirstName = 'John' AND OrderCount > 2";
var strSort = "OrderCount DESC";

// Use the Select method to find all rows matching the filter.
foundRows = ds.Table[0].Select(strExpr, strSort);

或者您可以使用DataView:

ds.Tables[0].DefaultView.RowFilter = strExpr;

答案 1 :(得分:0)

我们可以使用绑定源来过滤数据。

 private BindingSource dashBoardBindingSource = new BindingSource();
 dashBoardBindingSource.DataSource= dataSet.Tables[0]; 
 resultsGrid.DataSource=dashBoardBindingSource;

 string filterCriteria = "CustomerFirstName={0}";
 dashBoardBindingSource.Filter=string.Format(CultureInfo.CurrentCulture, filterCriteria, textboxName.text);