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

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

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

Re[5]: テキストボックスに入れた文字列を直接コードにする方法


(過去ログ 117 を表示中)

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

■68952 / inTopicNo.1)  テキストボックスに入れた文字列を直接コードにする方法
  
□投稿者/ 白鴉 (9回)-(2013/11/26(Tue) 10:52:56)

分類:[VB.NET/VB2005 以降] 

visual studio 2010 使用言語c#の質問です。

テキストボックスに入れた文字列を直接コードで参照することはできますでしょうか?
このようなコードを改善したいのです。

string SubTable = listBox1.SelectedItem.ToString();
if(SubTable=="AssetSelection"){listBox2.DataSource=assetMannageDataSet.AssetSelection;}
if (SubTable == "BuyerCompany") { listBox2.DataSource = assetMannageDataSet.BuyerCompany; }
if (SubTable == "Cash") { listBox2.DataSource = assetMannageDataSet.Cash; }

これはlistBoxですが、もっと多くの選択肢があると全パターンを入力する手間が洒落になりません。
これを

string SubTable = listBox1.SelectedItem.ToString();
listBox2.DataSource=assetMannageDataSet./*選択した(入力した)文字列を持つデータテーブル*/;}

とこのように一括で行いたいのです。

少々分かりづらいのですが、手段があれば教えてください。よろしくお願いします。
引用返信 編集キー/
■68953 / inTopicNo.2)  Re[1]: テキストボックスに入れた文字列を直接コードにする方法
□投稿者/ Hongliang (129回)-(2013/11/26(Tue) 11:03:37)
DataSet.Tablesで参照できるDataTableCollectionは、テーブル名でアクセスできるインデクサもありますが。
http://msdn.microsoft.com/ja-jp/library/58st33fb.aspx

TextBoxかListBoxかどっちなんでしょう。
TextBoxであるのなら、任意に文字列を入力できるコントロールでテーブル名を入力させると存在しないテーブルを指定されそうです。
引用返信 編集キー/
■68954 / inTopicNo.3)  Re[2]: テキストボックスに入れた文字列を直接コードにする方法
□投稿者/ 白鴉 (11回)-(2013/11/26(Tue) 11:13:47)
No68953 (Hongliang さん) に返信
> TextBoxかListBoxかどっちなんでしょう。
> TextBoxであるのなら、任意に文字列を入力できるコントロールでテーブル名を入力させると存在しないテーブルを指定されそうです。

お早い返信ありがとうございます。リンクページはこれから見に行きます。
ここではlistBoxですが、別のところにcomboBoxとtextBoxで似たようなコードを書かねばならないので、できれば全パターンについて教えていただけると助かります。

引き続きよろしくお願いします。
引用返信 編集キー/
■68955 / inTopicNo.4)  Re[3]: テキストボックスに入れた文字列を直接コードにする方法
□投稿者/ shu (429回)-(2013/11/26(Tue) 11:53:50)
No68954 (白鴉 さん) に返信

> お早い返信ありがとうございます。リンクページはこれから見に行きます。
まず見てから話を進めた方がよいと思います。


> ここではlistBoxですが、別のところにcomboBoxとtextBoxで似たようなコードを書かねばならないので、できれば全パターンについて教えていただけると助かります。
ListBoxもComboBoxもListControlとしてこの実装は同じように出来ます。(リスト部分への設定であれば)
TextBoxへの設定というのが何を行うのか分かりません。
聞きたいという全パターンを出して下さい。
引用返信 編集キー/
■68971 / inTopicNo.5)  Re[3]: テキストボックスに入れた文字列を直接コードにする方法
□投稿者/ Jitta (113回)-(2013/11/26(Tue) 21:21:54)
Jitta さんの Web サイト
No68954 (白鴉 さん) に返信
 今回のケースでの回答ではありません。
今回のケースでの回答は、Hongliangさんが示されています。

> string SubTable = listBox1.SelectedItem.ToString();
> if(SubTable=="AssetSelection"){listBox2.DataSource=assetMannageDataSet.AssetSelection;}
> if (SubTable == "BuyerCompany") { listBox2.DataSource = assetMannageDataSet.BuyerCompany; }
> if (SubTable == "Cash") { listBox2.DataSource = assetMannageDataSet.Cash; }

 このように、ある変数の値に対応したオブジェクトを取り出したい、というケースは、よくあります。
そのときに、このように if 文であったり、switch-case 文を連ねた場合、
コードのメンテナンスが困難になる場合があります。

 そこで、次のようにします。次の宣言を、どこかに定義しておきます。

var 選択に対応するテーブルの辞書 = new Dictionary<string, DataTable> {
  { "AssetSelection", assetMannageDataSet.AssetSelection },
  { "BuyerCompany", assetMannageDataSet.BuyerCompany },
  { "Cash", assetMannageDataSet.Cash },
};

そして、使いたいところで、このようにして使います。

listBox2.DataSource = 選択に対応するテーブルの辞書[listBox1.SelectedItem.ToString()];

これによって、プロセスがデータ化します。
その恩恵は、データが増えたところでプロセスには影響しない、ということです。
で、この投稿をする頃には、Hongliangさんの示された先をご覧になったことでしょう。
DataSet は、内部でこの辞書を作ってくれているので、今回のケースでは、次のようになります。

listBox2.DataSource = assetMannageDataSet[listBox1.SelectedItem.ToString()];

引用返信 編集キー/
■68972 / inTopicNo.6)  Re[4]: テキストボックスに入れた文字列を直接コードにする方法
□投稿者/ 魔界の仮面弁士 (433回)-(2013/11/26(Tue) 21:46:31)
No68971 (Jitta さん) に返信
> DataSet は、内部でこの辞書を作ってくれているので、今回のケースでは、次のようになります。
> listBox2.DataSource = assetMannageDataSet[listBox1.SelectedItem.ToString()];

そうではなく、
 listBox2.DataSource = assetMannageDataSet.Tables[listBox1.SelectedItem.ToString()];
あるいは、
 listBox2.DataSource = assetMannageDataSet.Tables[listBox1.GetItemText(listBox1.SelectedItem)];
では無いでしょうか。
引用返信 編集キー/
■68986 / inTopicNo.7)  Re[5]: テキストボックスに入れた文字列を直接コードにする方法
□投稿者/ 白鴉 (12回)-(2013/11/27(Wed) 11:24:13)
返信遅れて申し訳ありませんでした。
色々参考になりましたのでこれにて解決といたします。

皆様ありがとうございました。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -