2012-05-11 106 views
1

你好,我有一個datagridview已經有許多行添加到它。我也有一個文本框,如果它們不匹配,我想過濾掉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];     
} 

現在,當我開始輸入「約翰」到文本框和第一列是「姓名」,我希望所有的名字細胞排不以「J」開頭,然後是「Jo」等,當我刪除字符時,我想讓這些行回來。這可能嗎?在將SQL查詢用於數據庫之前,我已經完成了此操作,但是此源不同。我必須在每個textChanged事件清除表格。這裏約有20K行。

回答

1

之前分配表的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; 
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);