您好我有一个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行。
答案 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);