DataGridView comboBox с различными источниками данных для каждой ячейки - PullRequest
1 голос
/ 06 февраля 2012

Я пытаюсь создать DataGridView, который содержит информацию о конфигурации.

Доступные значения могут изменяться для каждой строки в столбце на основе значений в другом столбце, поэтому я не могу присоединить один источник данных кстолбец comboBox.Например: если вы выбираете автомобиль, доступные цвета должны быть ограничены цветами, доступными для этой модели.

Car                 ColorsAvailable
Camry               {white,black}
CRV                 {white,black}
Pilot               {silver,sage}

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

Каков хороший дизайн для реализации такого типа пользовательского интерфейса?

1 Ответ

8 голосов
/ 07 февраля 2012

Вы можете установить DataSource отдельно для каждого DataGridViewComboBoxCell:

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex == 0) // presuming "car" in first column
    { // presuming "ColorsAvailable" in second column
        var cbCell = dataGridView1.Rows[e.RowIndex].Cells[1] as DataGridViewComboBoxCell;
        string[] colors = { "white", "black" };
        switch (dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString())
        {
            case "Pilot": colors = new string[] { "silver", "sage" }; break;
                // case "other": add other colors
        }

        cbCell.DataSource = colors;
    }
}

Если ваши цвета (и, возможно, даже машины) являются сильными типами, например, перечислители, вы должны использовать эти типы вместо строк, которые я включаю и вставляю сюда ...

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