datagridview и зависимые combobox

370
09 декабря 2016, 08:56

Допустим, имеется datagridview, где есть 2 колонки с типом datagridviewcombobox(далее cb).

Нужно сделать, что бы от выбора значения в первом cb зависели значения во втором cb.

Проблема в том, что когда я создам вторую строчку и выберу в первом cb другое значение, то во втором cb первой строки сбросится значение cb так как cb действует на весь datagridviewcombobox.

Можно ли этого избежать?

Answer 1

Создавайте и загружайте каждый комбобокс отдельно.

private void Form1_Load(object sender, EventArgs e)
{
    dataGridView1.ColumnCount = 2;
    DataGridViewRow row = new DataGridViewRow();
    row = GetComboBox();
    dataGridView1.Rows.Add(row);
    dataGridView1.CellValueChanged += dataGridView1_CellValueChanged;
}
void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    dataGridView1.Rows[e.RowIndex].Cells[1] = GetCell(dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString());
}
private DataGridViewRow GetComboBox()
{
    DataGridViewRow rowDG = new DataGridViewRow();
    rowDG.CreateCells(dataGridView1);
    DataGridViewComboBoxCell cell_CB1 = new DataGridViewComboBoxCell();
    cell_CB1.Items.AddRange("Значение ComboBox'a 1");
    cell_CB1.Items.AddRange("Значение ComboBox'a 2");
    cell_CB1.Items.AddRange("Значение ComboBox'a 3");
    DataGridViewComboBoxCell cell_CB2 = new DataGridViewComboBoxCell();
    rowDG.Cells[0] = cell_CB1;
    rowDG.Cells[1] = cell_CB2;
    return rowDG;
}
private DataGridViewComboBoxCell GetCell(string value)
{
    DataGridViewComboBoxCell cell_CB2 = new DataGridViewComboBoxCell();
    switch(value)
    {
        case "Значение ComboBox'a 1":
            cell_CB2.Items.AddRange("Значение ComboBox'a 101");
            cell_CB2.Items.AddRange("Значение ComboBox'a 102");
            cell_CB2.Items.AddRange("Значение ComboBox'a 103");
            break;
        case "Значение ComboBox'a 2":
            cell_CB2.Items.AddRange("Значение ComboBox'a 201");
            cell_CB2.Items.AddRange("Значение ComboBox'a 202");
            cell_CB2.Items.AddRange("Значение ComboBox'a 203");
            break;
        default:
            cell_CB2.Items.AddRange("Значение ComboBox'a 301");
            cell_CB2.Items.AddRange("Значение ComboBox'a 302");
            cell_CB2.Items.AddRange("Значение ComboBox'a 303");
            break;
    }           
    return cell_CB2;
}
READ ALSO
ListView с WrapPanel - как сделать VerticalScrollBar?

ListView с WrapPanel - как сделать VerticalScrollBar?

Имеется ListView следующего вида:

349
Как в C# обходились, когда не было Dynamic?

Как в C# обходились, когда не было Dynamic?

Например, из вне приходит какой-то объект неизвестного типа

311
Стиль контролов в WPF

Стиль контролов в WPF

Уже третий день бьюсьНаписал триггер для кнопки:

323
Получить привязанный объект из DataGridViewComboBoxCell

Получить привязанный объект из DataGridViewComboBoxCell

У стандартного ComboBox есть свойство SelectedValue, которое можно привести к привязанному типу и получить значение из поля, которое не отображается...

308