|
■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()];
|