2011-10-31 14 views
4

私はこれをシンプルだと確信していますが、私は約1/2日をグーグルで過ごし、さまざまなことを試してみました。c#datagridviewコンボボックスの列datasouce from list/dictionary/datatable

私はデータテーブルを持っており、1つのカラムは別のデータベーステーブルの整数ID外部キーです。

私はdatagridviewを持っており、ユーザーが値を変更できるようにコンボボックスの列を使用したいと考えています。しかし、整数を使用する代わりに、名前を使用することは素晴らしいことです。

パブリックメンバーint IDとstring Nameを持つ単純な構造体を作成しようとしました。列挙型(コンパイル時には知られていない値)を調べましたが、まだ動作するものはありませんでした。

コンボボックスに構造体値を設定できましたが、プログラムで選択した項目/インデックスを設定できませんでした。

gridview datasource's fk ID's 
1 
2 
3 

Foreign Key table: 

ID Name 
1 Name 1 
2 Name 2 
3 Name 3 

Datagridviewcombobox列を:すなわち、ID「5」はDataTableのであれば、私は希望しています明確にする5.

のIDを持つ構造体へのコンボボックス選択した項目を設定します3つのアイテムをロードする必要があります。 「名前1、名前2、名前3」と表示されます。 gridviewデータソースのFK idに基づいて、それぞれの選択項目が一致する必要があります。

ヘルプ?

アンドリュー

答えて

9

あなたはDataGridViewComboBoxColumn.DataSourceプロパティを設定し、ComboBoxに示されているかを決定するためにValueMemberDisplayMemberプロパティを使用することができます。最も簡単なのはおそらくDataTableにあなたのFK値をロードし、それをデータソースとして使用することでしょう。あなたの例:

// assuming your DataGridViewComboBox column is fkCol 
// and your fk values are in a DataTable called fkTable 
fkCol.DataSource = fkTable; 
fkCol.ValueMember = "ID"; 
fkCol.DisplayMember = "Name"; 

私はあなたのDataGridViewあなたの最初のDataTableに結合されているかわかりませんが、あなたはDataPropertyNameを使用して、元のDataTable内の特定の列を持つDataGridViewComboBox列を関連付けることができます。

fkCol.DataPropertyName = "ColumnName"; 
+0

ありがとうございました!検索の1日2分の1と私は必要なすべての2行のコード - DOHでした!これは機能しています。 – andrew

0
DataAccessLayer dal = new DataAccessLayer(); 
    DataTable movies = dal.GetMovies(); 

    gvMovies.DataSource = movies; 
    gvMovies.AllowUserToAddRows = false; 
    gvMovies.AllowUserToDeleteRows = false; 

    //Create the new combobox column and set it's DataSource to a DataTable 
    DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn(); 
    col.DataSource = dal.GetMovieTypes(); ; 
    col.ValueMember = "MovieTypeID"; 
    col.DisplayMember = "MovieType"; 
    col.DataPropertyName = "MovieTypeID"; 

    //Add your new combobox column to the gridview 
    gvMovies.Columns.Add(col); 
関連する問題