2008-10-27 62 views
18

我在我的WinForms應用程序中有一個DataGridViewComboBoxColumn的DataGridView。我需要手動下拉(打開)這個DataGridViewComboBoxColumn,比方說,點擊一個按鈕後。如何手動下拉DataGridViewComboBoxColumn?

我需要這個的原因是我已經將SelectionMode設置爲FullRowSelect,我需要點擊2-3次打開組合框。我想單擊組合框單元,它應該立即下降。我想用CellClick事件做到這一點,或者有其他方法嗎?

我在谷歌和VS幫助搜索,但我還沒有找到任何信息。

任何人都可以幫忙嗎?

回答

22

我知道這不是理想的解決方案,但它確實創建了單元格內的單擊組合框。

Private Sub cell_Click(ByVal sender As System.Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick 
     DataGridView1.BeginEdit(True) 
     If DataGridView1.Rows(e.RowIndex).Cells(ddl.Name).Selected = True Then 
      DirectCast(DataGridView1.EditingControl, DataGridViewComboBoxEditingControl).DroppedDown = True 
     End If 
    End Sub 

其中「ddl」是我在gridview中添加的組合框單元格。

10

我已經能夠你在找什麼親近通過設置

DataGridView1.EditMode = DataGridViewEditMode.EditOnEnter 

只要沒有其他單元格的下拉列表中。它應該立即顯示選定的單元格的下拉列表。

如果有什麼問題,我會不斷思考和更新。

15

謝謝ThisMat,您的解決方案完美地工作。

我在C#代碼:

private void dataGridViewWeighings_CellClick(object sender, DataGridViewCellEventArgs e) { 
    if (e.RowIndex < 0) { 
     return;  // Header 
    } 
    if (e.ColumnIndex != 5) { 
     return;  // Filter out other columns 
    } 

    dataGridViewWeighings.BeginEdit(true); 
    ComboBox comboBox = (ComboBox)dataGridViewWeighings.EditingControl; 
    comboBox.DroppedDown = true; 
} 
+0

我很高興你得到它的工作! – thismat 2008-10-28 12:41:38

2

感謝C#版本。以下是我對組合列名搜索的貢獻:

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    string Weekdays = @"MondayTuesdayWednesdayThursdayFridaySaturdaySunday"; 
    if (Weekdays.IndexOf(dgv.Columns[e.ColumnIndex].Name) != -1) 
    { 
     dgv.BeginEdit(true); 
     ComboBox comboBox = (ComboBox)dgv.EditingControl; 
     comboBox.DroppedDown = true; 
    } 
} 
1

我正在尋找這個答案。我最終編寫了一個可以從任何DataGridView中調用的泛型子類,因爲我的應用程序中有很多東西,我希望它們都以相同的方式運行。這對我來說非常合適,所以我想與任何偶然發現這篇文章的人分享。

在鼠標點擊事件的DGV我添加代碼

Private Sub SomeGrid_MouseClick(sender As Object, e As MouseEventArgs) Handles SomeGrid.MouseClick 
    DGV_MouseClick(sender, e) 
End Sub 

它調用下面子,我存儲共享模塊

Public Sub DGV_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) 
    Try 
     Dim dgv As DataGridView = sender 
     Dim h As DataGridView.HitTestInfo = dgv.HitTest(e.X, e.Y) 
     If h.RowIndex > -1 AndAlso h.ColumnIndex > -1 AndAlso dgv.Columns(h.ColumnIndex).CellType Is GetType(DataGridViewComboBoxCell) Then 
      Dim cell As DataGridViewComboBoxCell = dgv.Rows(h.RowIndex).Cells(h.ColumnIndex) 
      If Not dgv.CurrentCell Is cell Then dgv.CurrentCell = cell 
      If Not dgv.IsCurrentCellInEditMode Then 
       dgv.BeginEdit(True) 
       CType(dgv.EditingControl, ComboBox).DroppedDown = True 
      End If 
     End If 
    Catch ex As Exception 
    End Try 
End Sub 

我沒有抓到任何錯誤的,我只包括Try..Catch代碼爲一些罕見的例子,我想不出可能會拋出異常。我不希望用戶因爲此場景的錯誤消息而煩惱。如果分組失敗,那麼DGV很可能就像通常那樣運行。