コンボボックスにインポートしたいテーブルを含むデータセットがあります。つまり、基本的に、各テーブルの各名前をコンボボックスにインポートしたいと思います。
これはWinformアプリケーション用です
これは、各名前を手動で追加しなくても可能でしょうか?
これは、後でデータグリッドにテーブルを表示するためにテーブルを選択できるようにするためです。
TableName&Table(Dictionary<string,DataTable>
)のディクショナリを作成し、それをComboBoxのデータソースにバインドします。
使用する
DisplayMember
(DataSourceからDisplayMemberを割り当てるため)は、ComboBoxアイテムに表示されるデータソース内のアイテムです。
ValueMemeber
(データソースからValueMemberを割り当てるため)は、アイテムの実際の値として使用されるデータソース内のアイテムです。
コード
Dictionary<string, DataTable> dictionary = new Dictionary<string, DataTable>();
foreach (DataTable table in ds.Tables)
{
dictionary.Add(table.TableName, table);
}
comboBox1.DataSource = new BindingSource(dictionary, null);
comboBox1.DisplayMember = "Key";
comboBox1.ValueMember = "Value";
または
Linqクエリを使用して作成しますDictionary<string,DataTable>
Dictionary<string, DataTable> dictionary = ds.Tables.Cast<DataTable>().ToDictionary(x => x.TableName, t => t);
comboBox1.DataSource = new BindingSource(dictionary, null);
comboBox1.DisplayMember = "Key";
comboBox1.ValueMember = "Value";
ここでDictionary
はデータソースとして使用されます。Dictionary
2つのプロパティKey
&がありValue
ます。Key(TableName)はDisplayMemberとして使用され、Value(DataTable)はValueMemberとして使用されます。
コンボボックスSelectedIndexChanged
バインドグリッド上DataSource
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
dataGridView1.DataSource = comboBox1.SelectedItem;
}
どうですか
mycombobox.ItemSource = mydataset.Tables.Cast<DataTable>().Select(x => x.Name);
次に、ComboBoxの選択されたインデックスが変更されたイベントごとに実行します。
mydatagrid.ItemSource = mydataset.Tables(mycombobox.SelectedIndex);