1

您好,我有一个 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 行。

4

2 回答 2

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);

或者您可以使用数据视图:

ds.Tables[0].DefaultView.RowFilter = strExpr;
于 2012-05-11T02:58:40.487 回答
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);
于 2012-05-11T07:17:11.407 回答