2008-10-27 1 views
18

У меня есть DataGridView с одним DataGridViewComboBoxColumn в моем приложении WinForms. Мне нужно вручную открыть этот DataGridViewComboBoxColumn, скажем, после нажатия кнопки.Как вручную вырезать DataGridViewComboBoxColumn?

Причина, по которой мне это нужно, я установил SelectionMode в FullRowSelect, и мне нужно щелкнуть 2-3 раза, чтобы открыть поле со списком. Я хочу щелкнуть по ячейке со списком, и он должен немедленно упасть. Я хочу сделать это с помощью события CellClick, или есть ли другой способ?

Я ищу в Google и 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, так как у меня было много в моих приложениях, и я хотел, чтобы все они вели себя одинаково. Это работало хорошо для меня, поэтому я хотел поделиться им с кем-либо, кто наткнулся на этот пост.

В случае Mouseclick для 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 будет вести себя так, как обычно.

1

я смог активировать выпадающий и выпадающий его с помощью одного щелчка мыши, установив Editmode свойство DataGridView в EditOnEnter и создание EditingControlShowing событий и добавил код, чтобы упасть вниз в поле со списком в этом мероприятие.

Для более подробной информации, пожалуйста, проверьте - http://newapputil.blogspot.in/2015/08/add-combo-box-in-cell-of-datagridview.html