DOBON.NET DOBON.NETプログラミング掲示板過去ログ

データテーブル内の検索

環境/言語:[C#]
分類:[.NET]

いつもお世話になっています。
またまた教えてほしいことがあり、書き込みさせていただきます。
よろしくお願い致します。

現在、下記のプログラムを書き、あるキーワードでそのNOを調べられないか
と苦悩しています。

private void button1_Click(object sender, EventArgs e)
{
DataSet dataSet1 = new DataSet("商品マスター");
DataTable dataTable1 = dataSet1.Tables.Add("商品テーブル");
DataColumn dataClumn1 = dataTable1.Columns.Add("NO", typeof(int));
DataColumn dataClumn2 = dataTable1.Columns.Add("商品");
DataColumn dataClumn3 = dataTable1.Columns.Add("個数", typeof(int));
DataColumn dataclumn4 = dataTable1.Columns.Add("test");


// テーブルにデータを追加
dataTable1.Rows.Add(new Object[] { 1, "みかん", 100, "a" });
dataTable1.Rows.Add(new Object[] { 2, "りんご", 300, "b" });
dataTable1.Rows.Add(new Object[] { 3, "バナナ", 200, "c" });
dataTable1.Rows.Add(new Object[] { 4, "すいか", 300, "d" });
dataTable1.Rows.Add(new Object[] { 5, "りんご", 200, "e" });
dataTable1.Rows.Add(new Object[] { 6, "メロン", 100, "a" });

      string aaa="バナナ";
 MessageBox.show(*****)
      }

上記のたとえば、"バナナ”を検索すれば、3と出てくるような簡便な*****はないでしょうか?

よろしくお願いいたします。
DataTable.Selectメソッドを使えば実現できると思いますよ。
お世話になります。

■No14992に返信(trapemiyaさんの記事)
> DataTable.Selectメソッドを使えば実現できると思いますよ。
もしくは DataView とか。
■No14992に返信(trapemiyaさんの記事)
> DataTable.Selectメソッドを使えば実現できると思いますよ。

下記のような感じでなんとか出せました・・・が・・・
なんか、もっと簡便な方法ないでしょうか・・・?

string filterExp = "商品 = 'バナナ'";
DataRow[] drarray = dataTable1.Select(filterExp);


for (int i = 0; i < drarray.Length; i++)
{
DataRow temp = drarray[i];

strmake += temp["NO"].ToString() + "\n";
//temp.Delete();
}

MessageBox.Show(strmake);

>もしくは DataView とか。
・・・これはどういう意味でしょうか?DataGrid使ってってことでしょうか?
さらに短くするなら
foreach(DataRow temp in dataTable1.Select(filterExp))
{
strmake += temp["NO"].ToString() + "\n";
}
みたいな感じかと。

>>もしくは DataView とか。
>・・・これはどういう意味でしょうか?DataGrid使ってってことでしょうか?
DataGridとは関係ありません。
あるDataTableに対してそれを触らずにフィルタを通して該当するデータだけを
覗ける、データベースのビューの簡易版(←列は削ったりできないので簡易版。)
みたいなクラスです。ビューはいくつも作れます。
Selectメソッドの代わりに、というだけなので、その後はれちりんさんが
ご自分で書いた通りのコードと同じようにループで処理することになります。
返信ありがとうございます。

やはり、forやforeachでループさせて見る必要がありますか・・・
もっと簡便な方法がないかと、いろいろ調べてみたのですが、
どうしてもわかりませんでしたので書かせてもらいました。

 みなさまどうもありがとうございました。



■No15021に返信(こど。さんの記事)
> さらに短くするなら
> foreach(DataRow temp in dataTable1.Select(filterExp))
> {
> strmake += temp["NO"].ToString() + "\n";
> }
> みたいな感じかと。
>
> >>もしくは DataView とか。
> >・・・これはどういう意味でしょうか?DataGrid使ってってことでしょうか?
> DataGridとは関係ありません。
> あるDataTableに対してそれを触らずにフィルタを通して該当するデータだけを
> 覗ける、データベースのビューの簡易版(←列は削ったりできないので簡易版。)
> みたいなクラスです。ビューはいくつも作れます。
> Selectメソッドの代わりに、というだけなので、その後はれちりんさんが
> ご自分で書いた通りのコードと同じようにループで処理することになります。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板