18

現在クラスがあり、このクラスのコレクションを作成するための簡単なGUIを作成しようとしています。このクラスの属性のほとんどは文字列です。ただし、ユーザーが設定できる属性の1つは列挙型です。したがって、ユーザーインターフェイスには、この列挙型のドロップダウンリストを設定して、ユーザーが無効な値を入力できないようにする必要があります。現在、オブジェクトの初期リストを取得し、それらをDataTableに追加して、DataGridViewのデータソースをテーブルに設定しています。うまく機能し、1つのブール型プロパティのチェックボックス列を作成します。しかし、列挙型の列をドロップダウンリストにする方法がわかりません。C#と.NET2.0を使用しています。

また、DataGridViewのデータソースをオブジェクトのリストに割り当てようとしましたが、これを行うと、列挙型に役立たず、DataGridViewに新しい行を作成できませんが、絶対にできませんDataTableをデータソースとして使用することに縛られていましたが、それは単に私が半ば機能しているオプションでした。

4

2 に答える 2

42

それが DataGridView 列で機能するかどうかはわかりませんが、ComboBoxes で機能します。

comboBox1.DataSource = Enum.GetValues(typeof(MyEnum));

と:

MyEnum value = (MyEnum)comboBox1.SelectedValue;

更新: DataGridView 列でも機能します。値の型を設定することを忘れないでください。

DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
col.Name = "My Enum Column";
col.DataSource = Enum.GetValues(typeof(MyEnum));
col.ValueType = typeof(MyEnum);
dataGridView1.Columns.Add(col);
于 2008-09-11T13:04:26.260 に答える
3

または、列挙子の値をフィルタリングする必要がある場合は、次のようにループして必要な値Enum.GetValues(typeof(EnumeratorName))を追加できます。

dataGridViewComboBoxColumn.Items.Add(EnumeratorValue)

余談ですが、DataTable を使用するのではなく、DataGridView の DataSource を BindingSource オブジェクトに設定し、BindingSource オブジェクトの DataSource を に設定BindingList<Your Class>できますIList

実際、DataTable をまだ持っていない状況 (つまり、データベース呼び出しから返されたもの) で DataTable を使用するよりも、これが望ましいかどうかを知りたいと思います。

于 2008-09-11T14:01:09.497 に答える