DataGridViewComboBoxColumn

DataGridViewComboBoxColumn

我有两个在运行时添加的DataGridViewComboBoxColumn,我需要第一个DataGridViewComboBoxColumn的项目在gridview的所有行中保持相同,但我希望第二个DataGridViewComboBoxColumn的项目根据选择的不同而不同第一个DataGridViewComboBoxColumn的项目

如果我们说第一个DataGridViewComboBoxColumn代表位置,第二个DataGridViewComboBoxColumn代表子位置。所以我想第二个DataGridViewComboBoxColumn项是第一个DataGridViewComboBoxColumn所选位置的子位置

最佳答案

一种选择是在单元级别更改子位置的数据源。

假设网格被命名为grid,两个网格列分别被命名为locationsColumn subLocationsColumn

private void Form1_Load(object sender, EventArgs e)
{
    locationsColumn.DataSource = new string[] { "Location A", "Location B" };
}


然后,在网格的CellEndEdit事件上:

private void grid_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    if(locationsColumn.Index == e.ColumnIndex)
    {
        DataGridViewComboBoxCell subLocationCell =
            (DataGridViewComboBoxCell)(grid.Rows[e.RowIndex].Cells["subLocationsColumn"]);

        string location = grid[e.ColumnIndex, e.RowIndex].Value as String;

        switch (location)
        {
            case "Location A":
                subLocationCell.DataSource = new string[] {
                    "A sublocation 1",
                    "A sublocation 2",
                    "A sublocation 3"
                };
                break;
            case "Location B":
                subLocationCell.DataSource = new string[] {
                    "B sublocation 1",
                    "B sublocation 2",
                    "B sublocation 3"
                };
                break;
            default:
                subLocationCell.DataSource = null;
                return;
        }
    }
}


当现有行的位置更改时,必须进行一些其他处理,但这是基本思想。

10-06 13:21