Как заполнить каждую DataGridViewComboBoxCell различными данными? - PullRequest
3 голосов
/ 15 января 2009

У меня есть два DataGridViewComboBoxColumn, которые я добавляю во время выполнения. Мне нужно, чтобы элементы первого DataGridViewComboBoxColumn оставались одинаковыми во всех строках gridView, но я хочу, чтобы элементы второго DataGridViewComboBoxColumn отличались от ряда к другому в зависимости на выбранном элементе первого DataGridViewComboBoxColumn

если мы говорим, что первый DataGridViewComboBoxColumn представляет местоположения, а второй DataGridViewComboBoxColumn представляет подчиненные местоположения. поэтому я хочу, чтобы вторые элементы DataGridViewComboBoxColumn были подгруппами выбранного местоположения из первого DataGridViewComboBoxColumn

Ответы [ 3 ]

2 голосов
/ 20 ноября 2009

Один из вариантов - изменить источник данных на уровне ячеек для размещения.

Предположим, что сетка имеет имя 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;
        }
    }
}

Некоторая дополнительная обработка необходима, когда местоположение изменяется для существующих строк, но это основная идея.

1 голос
/ 11 ноября 2009

Проверьте это, я думаю, что в общих чертах вам нужно:

http://www.timvw.be/2007/01/17/exploring-datagridviewcomboboxcolumn-databinding/

1 голос
/ 25 января 2009

Одной из идей было бы использование вторичного источника привязки для столбца «SubLocations». Этот BindingSource может быть отфильтрован по LocationId, выбранному в столбце «Locations». Ключом для этого является использование событий сетки EditingControlShowing и CellValueChanged для установки правильной фильтрации в столбце SubLocations при изменении выбранного местоположения.

Вот один пример здесь .

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