ComboBox в DatagridView в режиме редактирования - PullRequest
5 голосов
/ 16 сентября 2011

У меня есть DataGridView с режимом только для чтения, установленным в true (не редактируемый), который принимает значения из базы данных при загрузке формы.Когда я устанавливаю режим только для чтения на false (редактируемый режим), я хочу, чтобы определенный столбец (например, Department) отображался как ComboBox, чтобы я мог выбирать значения оттуда.И когда я вхожу в режим только для чтения, ComboBox должен исчезнуть, и DataGridView должен быть виден как обычно.Как этого добиться?Я использую C # framework 4.0, Winforms

Ответы [ 3 ]

4 голосов
/ 19 сентября 2011

См. Реализацию в ComboBox с поведением только для чтения .

Вы также можете изменить DisplayStyle в зависимости от того, когда изменилось свойство только для чтения DataGridView. Установка DisplayStyle на DataGridViewComboBoxDisplayStyle.Nothing скроет кнопку раскрывающегося списка.

Например, изменение свойства ReadOnly нажатием кнопки будет выглядеть примерно так:

private void mChangeReadOnlyButton_Click(object sender, EventArgs e)
{
   ComboBoxColumn2.DisplayStyle = (dataGridView1.ReadOnly) ?
      DataGridViewComboBoxDisplayStyle.ComboBox :
      DataGridViewComboBoxDisplayStyle.Nothing;
   dataGridView1.ReadOnly = !dataGridView1.ReadOnly;
}

Редактирование:

Редактируемый http://i51.tinypic.com/5e7o1w.jpg

ReadOnly:

ReadOnly http://i52.tinypic.com/1zgaxyt.jpg

1 голос
/ 17 ноября 2013

Если вы хотите скрыть комбинированный список для выбранных строк, вы можете использовать свойство DataGridViewComboBoxDisplayStyle

Доступны следующие варианты: ComboBox, DropdownBox или Нет

В примере - отображать ComboBox только в столбце 4, если в столбце 2 есть значение

For Each row As DataGridViewRow In dgv.Rows  
        Dim Cell As DataGridViewComboBoxCell = CType(row.Cells(4), DataGridViewComboBoxCell)  
    Cell.ReadOnly = True  
    Cell.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing  
    If row.Cells(2).Value IsNot Nothing Then  
        Cell.ReadOnly = False  
        Cell.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox  
    End If  
Next
1 голос
/ 18 сентября 2011

Я получил решение своей проблемы, просто подумал, чтобы опубликовать его здесь. При входе в режим редактирования запуск следующего кода может решить проблему.

public void bgCombo(DataGridView dg)
{
    foreach (DataGridViewRow row in dg.Rows)
    {
        DataGridViewComboBoxCell dgc = new DataGridViewComboBoxCell();
        dgc.Value = row.Cells["Department"].Value;
        row.Cells["Department"] = dgc;
    }
}

Перед установкой dgc в dataGridCell мы можем добавить в него коллекции элементов. Надеюсь, это поможет.

ПРОБЛЕМА. Если при редактировании индекс столбца и строки становится одинаковым, возникает ошибка: операция недопустима, поскольку она приводит к повторному вызову функции SetCurrentCellAddressCore.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...