Как получить значение ValueMember столбца datagridviewcomboboxcolumn

Друзья, я использую datagridviewcomboboxcolumn как индекс столбца 1 в моем datagridview. Я получил данные из таблицы базы данных доступа и заполнил столбец datagridviewcombobox следующим образом:

    for (int i = 0; reader.Read(); i++)
        {
            cmbBusCode.Items.Add(reader["BUSINESS_CODE"] + "-" + reader["BUSINESS_DESCRIPTION"]);
            cmbBusCode.ValueMember = "BUSINESS_CODE";
        }

Тогда я пишу это:

        cmbBusCode.DisplayIndex = 1;
        cmbBusCode.Width = 200;
        cmbBusCode.Name = "Code";
        cmbBusCode.HeaderText = "Code";

И добавив этот столбец как

    dgView.Columns.Add(cmbBusCode);

Поле со списком заполняется, и я могу выбрать любой из списка. Теперь, когда я сохраняю данные, я хочу получить ValueMember выбранного элемента. Чтобы получить это значение, я использую следующий код, но он дает строковое представление поля «BUSINESS_CODE», а не значение .. Пожалуйста, помогите мне, чтобы получить ValueMemeber выбранного элемента ..

    foreach (DataGridViewRow row in dgView.Rows)
    {
        string cd = row.Cells["Code"].Value.ToString();
    }

person Sukanya    schedule 04.05.2012    source источник


Ответы (2)


«Элемент», который вы добавляете в столбец, не имеет столбца «BUSINESS_CODE» (по сути, элемент, который вы добавляете, представляет собой просто строку), так что это не работает.

Что вам нужно сделать, так это назначить элементы, содержащие несколько столбцов. Один должен быть столбцом BUSINESS_CODE (поскольку именно этот столбец должен быть значением для базового поля в DataGridView), другой должен быть столбцом отображения, который содержит объединенное значение, которое вы добавляете в данный момент (DisplayMember и ValueMember ).

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

Затем добавьте таблицу в качестве источника данных для столбца.

person Thorsten Dittmar    schedule 04.05.2012

Вы можете попробовать добавить DataGridViewComboBoxCell вместо string в коллекцию cmbBusCode.Items. Затем вы можете указать Value в ячейке. Не уверен, сработает ли это, но попробовать стоит.

person Marek Dzikiewicz    schedule 04.05.2012
comment
Хм? cmbBusCode - это DataGridViewComboBoxCell! Его Items коллекция должна содержать список элементов, которые отображаются и могут быть выбраны. Если объекты, переданные как элементы, содержат элементы, соответствующие значениям DisplayMember и ValueMember, значения этих элементов отображаются или назначаются полю базового объекта данных. То, что вы предлагаете, не стоит пробовать, так как все работает не так ... - person Thorsten Dittmar; 04.05.2012
comment
@ThorstenDittmar, да, cmbBusCode - это DataGridViewComboBoxColumn, и я заполнил его, используя вышеупомянутый код. Я хотел получить соответствующий ValueMember для выбранного элемента в списке .. Но не получаю .. - person Sukanya; 04.05.2012
comment
Вы прочитали мой ответ? Ваши элементы не содержат свойства, имя которого вы присваиваете свойству ValueMember. Прочтите мой ответ. Проведя аналогию: вы можете написать метод с именем button_Click, однако он не будет вызываться, если вы не назначите его событию кнопки Click. Вы не получаете значение, потому что вы присвоили имя свойства ValueMember, но в базовом объекте нет ничего с таким именем. - person Thorsten Dittmar; 04.05.2012