2017-01-04 12 views
1

datagridviewは、List(of T)にバインドされています。(Tの)リストにバインドされたDataGridView

Private BodyComponents As New List(Of BodyComponent) 
Private BodyBinding As BindingSource 


Public Sub New() 

    ' This call is required by the designer. 
    InitializeComponent() 


    ' Set the bindingsource 
    BodyBinding = New BindingSource(BodyComponents, Nothing) 

    ' Add any initialization after the InitializeComponent() call. 
    dgvBodyOverview.DataSource = BodyBinding 

    .... 

リスト内のすべての項目は、これらのいずれかの材料As Stringである、複数のプロパティを有するオブジェクトを表します。私はユーザーが選択できるはずの利用可能な材料の大きなリストを持っています。ドロップダウンボックスとしてdatagridviewでこれを使用できるようにするにはどうすればよいですか?

Info:材料は、ダイアログが開かれ、ハードコードされていないときに実行時に読み込まれます。

答えて

1

の列が新しいDataGridViewComboBoxColumnMaterial 1を置き換える作成された後、作成したので、あなたは、列の型を変更することはできません:あなたは1を表示する列を必要とする場合には

dgv1.DataSource = ... 

Dim cbo = New DataGridViewComboBoxColumn() 
Dim oldCol = dgv1.Columns("Material") 
' copy or set prop values 
cbo.HeaderText = oldCol.HeaderText 
cbo.Name = oldCol.Name 
cbo.DataSource = MaterialsList 
cbo.DataPropertyName = "Material" 

' replace the column 
dgv1.Columns.Remove(oldCol) 
dgv1.Columns.Add(cbo) 
' cant set the Display Index until it is in the DGV 
cbo.DisplayIndex = oldCol.DisplayIndex 

IdのようなものをDGVのDataSourceに保存すれば、コンボコラムのDataSourceでそれを実行できます。

使用これらの名前と値のペアを表示したいIdとテキストが含まれている、または単純なListのいずれかDataTableクエリ結果:

cbo.DataSource = Materials    ' == a DT or List of Name-Id 
cbo.DisplayName = "MaterialName"  ' col or prop name to show 
cbo.ValueMember = "Id"     ' value to save 

列のものと一致するValueMemberニーズのデータ​​型それはデータソースにマップされます(cbo.DataPropertyName

+0

別の 'Id'が必要ない場合には、何が最適ですか?文字列を表示して保存するだけです。 –

+0

これはHRの上のトップ部分がDataSourceとして設定するものです - それが普通のList(Stringの)であると仮定すると、それは何であったかについて多くのことを言っていません – Plutonix

+0

文字列配列またはリストが機能します – Plutonix

関連する問題