2012-05-11 4 views
1

こんにちは私はすでに多くの行が追加されているdatagridviewを持っています。私はまた、それらが一致しない場合、私は、datagridview行の行をフィルタリングするテキストボックスがあります。私は何とか、テキストボックスを列に接続して、行を表示して非表示にしたいと考えています。テーブルを使用して移入された:filter datagridview rows

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"など、文字を削除すると、行が戻ってくるようにします。これは可能ですか?私はDBに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);