質問

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

また、DataGridView の DataSource をオブジェクトのリストに割り当てようとしましたが、これを行うと列挙型では役に立たず、DataGridView に新しい行を作成できませんが、間違いなくそうではありません。 DataTable を DataSource として使用する必要があるため、それは単に私が半分動作しているオプションにすぎませんでした。

役に立ちましたか?

解決

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

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);

他のヒント

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

dataGridViewComboBoxColumn.Items.Add(EnumeratorValue)

余談ですが、DataTable を使用する代わりに、DataGridView の DataSource を BindingSource オブジェクトに設定し、BindingSource オブジェクトの DataSource を BindingList<Your Class>, を渡すことで入力します。 IList コンストラクターに。

実際、DataTable をまだ持っていない状況 (つまり、データベース呼び出しから返されます)。

    if(e.KeyCode == Keys.Oem3)
    {

    }

これは私にとってはうまくいきました

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top