Выберите ListIndex вместо Object для выбранной записи в DataGridViewComboBoxCell - PullRequest
2 голосов
/ 23 июня 2009

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

например. У меня есть список месяцев (январь-декабрь). Я хочу выбрать «Апрель» и сохранить «3» в ячейке (но по-прежнему отображать «Апрель» в качестве выбранного значения). Затем я решаю отобразить все значения месяца на польском языке, изменить источник данных, и значение «4» теперь отображает «kwiecień».

Я смотрел на DisplayMembers и ValueMembers, а также на такие функции, как функции GetFormattedValue и GetEditedFormattedValue, но не могу понять, как это сделать Похоже, что большинство из них предназначено для использования с данными базы данных, и здесь я это не использую.

Может ли кто-нибудь с проницательностью сказать мне лучшие вызовы для переопределения, чтобы получить такое поведение, которое я ищу?

Ответы [ 3 ]

1 голос
/ 24 июня 2009

Вам не нужно ничего переопределять, чтобы сделать эту работу.

Создайте класс с 2 свойствами ID и MonthName и сохраните экземпляры этого класса в своем списке. Тогда настройки ValueMember = "ID" и DisplayMember = "MonthName" должны работать.

Я могу привести пример. Используете ли вы C # или VB.NET?

0 голосов
/ 29 июня 2009

В итоге я заставил свой объект данных реализовать интерфейс iBindingList, как описано в , еще одном вопросе, который я задал , наряду с переопределением методов GetValue и SetValue моего DataGridViewCell. Честно говоря, большинство моих трудностей за последнюю неделю было связано с тем, что я не мог переопределить свойство Value объекта DataGridViewCell. Обнаружение, что я могу переопределить эти методы вместо свойства и добиться того же результата, было чем-то вроде находки.

0 голосов
/ 23 июня 2009

Попробуйте использовать свойство управления редактированием DataGridView. Это должно дать вам доступ к свойствам поля со списком.

Вот краткий пример.

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        // Cast the editing control as a ComboBox to get to the selected index property
        ComboBox cb = dataGridView1.EditingControl as ComboBox;
        if (cb != null)
        {
            int selectedIndex = cb.SelectedIndex;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...