C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: DataGridView 条件を入力して検索を行いたい


(過去ログ 127 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■75644 / inTopicNo.1)  DataGridView 条件を入力して検索を行いたい
  
□投稿者/ 西田 (1回)-(2015/04/18(Sat) 11:55:54)

分類:[.NET 全般] 

利用しているモノ:C#、Win 7、VS 2010、.NET 4.0、DataSet、SQLite

C#を使って、DataGridViewにSQLiteのテーブルに入っている情報を表示しています。

DBから取得して、DataGridViewに表示している項目は下記の3つです。

NAME(TEXT)
AGE(INTEGER)
SEX(TEXT)

同じようにFormには3つのテキストボックスがあります。

NAME(textBoxName)
AGE(textBoxAge)
SEX(textBoxSEX)

やりたい事は、テキストボックスに欲しい情報を入力し、検索を行うとDataGridViewに検索された情報が表示されるようにしたいと思います。

困っている事は検索のパターンが、非常に多くなります。検索項目が3つ程度なら各パターン毎のSQLを書いて実行する事ができるのですが、検索項目が10も20もあると非常に大変になります。

パターン:
・NAMEのみ
・AGEのみ
・SEXのみ
・NAMEとAGE
・NAMEとSEX
・AGEとSEX
・NAMEとAGEとSEX
などなど


今やっている方法は、下記のようなコードを条件毎に書いています。これだと非常に多くの条件文を書かなくてはいけなくて大変です。

if(textBoxName.Text != "" AND textBoxAge.Text == "" AND textBoxSEX.Text == "")
{
// strSQL = "SELECT * FROM TABLE WHERE NAME = '" + textBoxName.Text + "'";
// SQLiteCommand cmd = cn.CreateCommand();
// SQLiteDataAdapter adp = new SQLiteDataAdapter();
// cmd.CommandText = strSQL;
// cmd.ExecuteNonQuery();
// adp.Fill(dt);
// dgv.DataSource = dt;
}

これを解決できるような方法はあるでしょうか?よろしくお願いいたします。

引用返信 編集キー/
■75645 / inTopicNo.2)  Re[1]: DataGridView 条件を入力して検索を行いたい
□投稿者/ 魔界の仮面弁士 (295回)-(2015/04/18(Sat) 12:46:58)
No75644 (西田 さん) に返信
> 困っている事は検索のパターンが、非常に多くなります。

var where = new List<string>();
if (txtNAME.TextLength > 0) where.Add( string.Format("NAME='{0}'", txtNAME.Text.Replace("'", "''") )  );
if (txtAGE.TextLength  > 0) where.Add( string.Format("AGE={0}"   , txtAGE.Text                     )  );
if (txtSEX.TextLength  > 0) where.Add( string.Format("SEX='{0}'" , txtSEX.Text.Replace("'", "''")  )  );

var SQL = "SELECT * FROM TABLE";
if (where.Count > 0)
{
    SQL += " WHERE " + string.Join(" AND ", where);
}

引用返信 編集キー/
■75646 / inTopicNo.3)  Re[1]: DataGridView 条件を入力して検索を行いたい
□投稿者/ WebSurfer (543回)-(2015/04/18(Sat) 16:03:31)
No75644 (西田 さん) に返信

> これだと非常に多くの条件文を書かなくてはいけなくて大変です。

その大変なところの解決策ではないですが、抽出条件が変わるたびに SELECT クエリを組み立てて DB サーバーに投げてデータを取得しているところが気になったので一言・・・


最初に条件なしで全件取得して DataTable を作成することはできるのでしょうか?

そうであれば、DataTable に全件取得後は DataTable.DefaultView プロパティで 
DataView を取得し、その RowFilter プロパティで表示するデータを絞るようにし
てはいかがですか?

以下のような感じです(あくまで感じ)。

if (!String.IsNullOrEmpty(textBox1.Text))
{
    NorthwindDataSet.CustomersDataTable table = this.northwindDataSet.Customers;
    table.DefaultView.RowFilter = "CustomerID='" + textBox1.Text + "'";
    this.customersBindingSource.DataSource = this.northwindDataSet.Customers;
}

引用返信 編集キー/
■75653 / inTopicNo.4)  Re[2]: DataGridView 条件を入力して検索を行いたい
□投稿者/ 西田 (2回)-(2015/04/20(Mon) 17:15:47)
魔界の仮面弁士 さん

ご回答ありがとうございます。お教え頂いた方法で問題無く問題解決ができました!大変助かりました、ありがとうございます。

WebSurferさん

ご回答ありがとうございます。一度、全データをデータテーブルに取り込んでいるので、それをフィルタしたほうが良いとのことですね。
とても参考になります。こちらも参考にさせて頂いて、機能実現したいと思います。

ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -