2008-10-27 9 views
18

Mam DataGridView z jednym DataGridViewComboBoxColumn w mojej aplikacji WinForm. Muszę ręcznie upuścić (otworzyć) tę DataGridViewComboBoxColumn, powiedzmy po kliknięciu przycisku.Jak ręcznie upuścić DataGridViewComboBoxColumn?

Powód, dla którego tego potrzebuję, to ustawiłem SelectionMode na FullRowSelect i muszę kliknąć 2-3 razy, aby otworzyć pole kombi. Chcę kliknąć komórkę combobox i powinna ona natychmiast upuścić. Chcę to zrobić z wydarzeniem CellClick, czy jest jakiś inny sposób?

Szukam w pomocy Google i VS, ale nie znalazłem jeszcze żadnych informacji.

Czy ktoś może pomóc?

Odpowiedz

22

Wiem, że to nie może być idealne rozwiązanie, ale tworzy jedno komboksyowe pole kombo działające w komórce.

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 

gdzie "ddl" to komórka combobox, którą dodałem w widoku siatki.

10

udało mi się zbliżyć do tego, co szukasz ustawiając

DataGridView1.EditMode = DataGridViewEditMode.EditOnEnter 

Dopóki rozwijana no inna komórka jest pokazany powinien natychmiast wyświetlić listę rozwijaną w wybranej komórce.

Będę ciągle myśleć i aktualizować, jeśli coś wyjdzie.

15

Dzięki ThisMat Twoje rozwiązanie działa idealnie.

Mój kod w języku 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

Cieszę się, ale to działa! – thismat

+0

To było niezwykle pomocne. – BrianH

2

Dzięki dla wersji C#. Oto mój wkład w wyszukiwanie według nazw kolumn składanych:

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

Szukałem również odpowiedzi na to pytanie. W końcu napisałem ogólny sub, który można nazwać z dowolnego DataGridView, ponieważ miałem mnóstwo w moich aplikacjach i chciałem, aby wszyscy zachowywali się w ten sam sposób. To zadziałało dobrze, dlatego chciałem podzielić się nim z każdym, kto natknął się na ten post.

W przypadku kliknięcie myszką na DGV dodać kod

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

który wywołuje następujące sub że przechowywanie we wspólnym module

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 

nigdy złowionych żadnych błędów, tylko m.in. kod Try..Catch dla rzadkiej instancji, o której nie mogłem pomyśleć, może rzucić wyjątek. Nie chciałem, aby użytkownik niepokoił się komunikatami o błędach w tym scenariuszu. Jeśli jednostka podrzędna ulegnie awarii, najprawdopodobniej DGV będzie po prostu zachowywać się tak, jak to zwykle robi.

Powiązane problemy