2015-11-27 42 views
0

我目前有一個DataGridView基於VB.NET中的靜態表。我想將dgv中的其中一列「轉換」爲DataGridViewComboBoxColumn。我的想法是簡單地生成列,將其插入到表,然後在感興趣的列中的值複製到新ComboBoxColumn,像這樣:「將」DataGridViewColumn轉換爲DataGridViewComboBoxColumn VB.NET

Dim table = DbModel.GetEntries() 

    If Not table Is Nothing Then 
     With DataGridView1 
      .DataSource = table 
      .RowHeadersVisible = False 
      .AllowUserToAddRows = True 
      .SelectionMode = DataGridViewSelectionMode.CellSelect 
      With .Columns("ID") 
       .Width = 31 
       .ReadOnly = True 
      End With 

      Dim comboBoxColumn As DataGridViewComboBoxColumn = New DataGridViewComboBoxColumn() 
      comboBoxColumn.ValueType = GetType(String) 

      Dim myList As New List(Of String) 
      myList.Add("Choice 1") 

      comboBoxColumn.DataSource = myList 

      DataGridView1.Columns.Insert(2, comboBoxColumn) 

      For i = 1 To DataGridView1.RowCount - 1 

       If Not DataGridView1.Rows(i).Cells(3).Value Is Nothing Then 
        DataGridView1.Rows(i).Cells(2).Value = DataGridView1.Rows(i).Cells(3).Value.ToString 
       End If 
       'MsgBox(comboBoxColumn.DataGridView.Rows(i).Cells(2).Value) 
      Next 

     End With 
     End If 

然而,在新列的單元格仍空;所以我認爲他們沒有被複制。但通過取消註釋For -loop中的註釋,我清楚地看到它們被複制。有人能告訴我關於我哪裏出錯的地方嗎? Tingis

回答

1

我不認爲你想要使用一個DataGridViewComboBoxColumn只有一個項目名爲Choice 1所以也許你的問題是,你試圖設置一個值不是一個有效的選擇。

因此,您必須填寫DataGridViewComboBoxColumn以包含原始列中的每個可能值。

Dim comboBoxColumn As DataGridViewComboBoxColumn = New DataGridViewComboBoxColumn() 
comboBoxColumn.ValueType = GetType(String) 

DataGridView1.Columns.Insert(2, comboBoxColumn) 

For i = 0 To DataGridView1.RowCount - 1 
    If Not IsNothing(DataGridView1.Rows(i).Cells(3).Value) Then 
     comboBoxColumn.Items.Add(DataGridView1.Rows(i).Cells(3).Value.ToString) 
    End If 
Next i 

For i = 0 To DataGridView1.RowCount - 1 
    If Not DataGridView1.Rows(i).Cells(3).Value Is Nothing Then 
     DataGridView1.Rows(i).Cells(2).Value = DataGridView1.Rows(i).Cells(3).Value.ToString 
    End If 
Next i 

也請注意,從0

+0

好的,謝謝,會試試!關於索引,輸入的表實際上具有列的名稱作爲條目(最初不是我的代碼)。 – Tingiskhan

+1

好的,完美!所以在我的回答中糾正for循環。 – tezzo

+0

嗨再Tezzo,這似乎好像沒有解決我的問題。可選項目已被更新,但列中的「選定值」尚未,即仍爲空。 – Tingiskhan

0

tezzo的解決方案,行索引開始工作,如果你只需要創建一個列時添加

comboBoxColumn.DataPropertyName = "<Your column name goes here>" 

。而且您甚至不必遍歷行並手動設置值。