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];                
}

テキストボックスに「ジョン」と入力し始め、最初の列が「名前」の場合、名前セルが「J」で始まらないすべての行が必要で、文字を削除すると「Jo」などになります。行が戻ってくることを望みます。これは可能ですか?DB への SQL クエリを使用する前にこれを実行しましたが、このソースは異なります。そして、すべての textChanged イベントでテーブルをクリアする必要がありました。ここには約2万行あります。

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

または、DataView を使用できます。

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 に答える