2008-09-11 9 views
16

現在クラスがあり、このクラスのコレクションを作成するための簡単なGUIを作成しようとしています。このクラスのほとんどの属性は文字列です。しかし、ユーザーが設定できる属性の1つはEnumです。したがって、私は、このenumのドロップダウンリストを持つユーザーインターフェイスに、有効でない値を入力することをユーザーに制限したいと考えています。現在、オブジェクトの最初のリストをDataTableに追加し、DataGridViewのDataSourceをテーブルに設定しています。うまく動作し、1つのBooleanプロパティのチェックボックス列も作成します。しかし、列挙型の列をドロップダウンリストにする方法はわかりません。私はC#と.NET 2.0を使用しています。DataGridViewの列挙型からドロップダウンリストオプションを作成

また、DataGridViewのDataSourceをオブジェクトのリストに割り当てることを試みましたが、これを実行すると列挙型には役立たず、DataGridViewで新しい行を作成することはできませんが私は間違いなくDataTableをDataSourceとして使用することに縛られていませんが、それは単に私が半作業しているオプションです。

答えて

34

ことがDataGridViewの列で動作するかどうかはわからないが、それはコンボボックスで動作します:

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

と:

MyEnum value = (MyEnum)comboBox1.SelectedValue; 

UPDATE:それはちょうどすることを忘れないでください、あまりにもDataGridViewの列で動作します値の型を設定します。

DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn(); 
col.Name = "My Enum Column"; 
col.DataSource = Enum.GetValues(typeof(MyEnum)); 
col.ValueType = typeof(MyEnum); 
dataGridView1.Columns.Add(col); 
+0

どのように/ comboBox1にアクセスするには? – ssal

3

それとも、あなたが列挙値のいくつかのフィルタリングを行う必要がある場合、あなたはEnum.GetValues(typeof演算(EnumeratorName))をループし、使用したいものを追加することができます

dataGridViewComboBoxColumn.Items.Add(EnumeratorValue) 

ようにDataTableを使用するのではなく、BindingSourceオブジェクトのDataSourceをBindingList <クラス>に設定して、DataGridViewのDataSourceをBindingSourceオブジェクトに設定することができます。これは、IListをコンストラクタに渡すことによって設定します。

実際には、DataTableをまだ使用していない状況(データベース呼び出しから返された状態)でDataTableを使用する方が望ましい場合は、誰でも知りたいと思うでしょう。