DataGridView comboBox为每个单元格提供不同的dataSource

时间:2012-02-06 15:44:23

标签: datagridview combobox datagridviewcombobox

我正在尝试创建一个包含配置信息的DataGridView。

可以根据不同列中的值为列中的每一行更改可用值,因此我无法将单个数据源附加到comboBox列。例如:如果选择汽车,则可用颜色应限制为该模型可用的颜色。

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

考虑dataGridView的原因是操作员可以为其他汽车添加行。

实现此类UI的优秀设计是什么?

1 个答案:

答案 0 :(得分:8)

您可以在每个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;
    }
}

如果您的颜色(甚至可能是汽车)是类似枚举器的强类型,您当然应该使用这些类型而不是我正在打开并插入的字符串...