2008-10-27 16 views
18

Ich habe eine DataGridView mit einer DataGridViewComboBoxColumn in meiner WinForms-Anwendung. Ich muss diese DataGridViewComboBoxColumn manuell öffnen, sagen wir nach dem Klicken auf eine Schaltfläche.Wie man eine DataGridViewComboBoxColumn manuell ablegt?

Der Grund, warum ich brauche das ist ich Selection zu FullRowSelect gesetzt haben und ich brauche 2-3 mal klicken, um das Kombinationsfeld zu öffnen. Ich möchte auf die Comboboxzelle klicken und sie sollte sofort herunterfallen. Ich möchte dies mit CellClick-Ereignis tun, oder gibt es einen anderen Weg?

ich in Google und VS Hilfe bin auf der Suche, aber ich habe keine Informationen noch nicht gefunden.

Kann jemand bitte helfen?

Antwort

22

Ich weiß, dass dies nicht die ideale Lösung sein kann, aber es macht einen einzigen Klick Kombinationsfeld erstellen, die in der Zelle funktioniert.

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 

wo "ddl" ist die Combobox-Zelle, die ich in der Gridview hinzugefügt.

10

ich in der Lage gewesen zu nahe zu kommen, was Sie suchen sie nach

Einstellung
DataGridView1.EditMode = DataGridViewEditMode.EditOnEnter 

Solange keine andere Zelle Dropdown angezeigt wird, sollte die ausgewählte Zelle Drop-Down-Anzeige sofort.

Ich werde denken und zu aktualisieren halten, wenn etwas kommt.

15

Dank thisMat, Ihre Lösung perfekt funktioniert.

Mein Code in 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

Ich bin froh, dass Sie bekam arbeiten it! – thismat

+0

Das war unglaublich hilfreich. – BrianH

2

Danke für die C# -Version. Hier ist mein Beitrag von Combo Spaltennamen suchen:

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

Ich war nach einer Antwort auf diese auch suchen. Ich schrieb schließlich ein generisches Sub, das von jedem DataGridView aufgerufen werden konnte, da ich viel in meinen Apps hatte und ich wollte, dass sie sich alle gleich benahmen. Das hat gut für mich funktioniert, also wollte ich es mit jedem teilen, der über diesen Post gestolpert ist.

Im Mouseclick-Ereignis für die DGV füge ich den Code

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

, die die folgenden Unter aufruft, die ich in einem gemeinsamen Modul speichern

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 

ich Fehler nie erwischt, ich sind nur Der Try..Catch-Code für eine seltene Instanz, an die ich nicht denken konnte, könnte eine Ausnahme auslösen. Ich wollte nicht, dass der Benutzer durch Fehlermeldungen für dieses Szenario belästigt wird. Wenn der Subversand fehlschlägt, wird sich der DGV höchstwahrscheinlich so verhalten, wie er es normalerweise tut.

Verwandte Themen