Как изменить текст ячейки comboBox динамически добавляемой DataGridViewComboBoxColumn?

Я все еще немного новичок в C#, но я использую Winforms, и у меня есть DataGridView, который подключен к источнику данных и заполняется правильно.

Я также добавил ComboBoxColumn во время выполнения. Этот ComboBoxColumn подключается к источнику данных, элемент отображения и значение элемента устанавливаются, устанавливается текст заголовка, а затем столбец добавляется в сетку данных. Соединение работает просто отлично, и когда пользователь нажимает, поле со списком заполняется, как и ожидалось.

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

Мой вопрос: когда эта сетка данных снова открывается или перерисовывается, она заполняется из-за свойства источника данных, но как я могу получить в ячейке comboBox значение VALUE, которое он выбрал изначально, а не просто пустое поле? Я знаю код получения значения из БД и ввода значения. Идеальным было бы, если бы я мог поместить эту переменную на дисплей comboBox. Имейте в виду, что comboBox по-прежнему привязан к данным, чтобы пользователь мог изменить значение, если он этого пожелает?

Я знаю, что в обычном элементе управления comboBox я должен просто установить свойство. Text. Но DataGridViewComboBox не имеет того же свойства.

Вот код для фактического подключения к данным и добавления comboBoxColumn:

    public void AddComboBoxColumn(DataGridView datagridName, DataTable table, string headerText, int columnIndex)
    {
        DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn();

        GetDisplayAndValueMembers(table, headerText); //Calls method that gets the datasource, displaymember, valuemember depending on column

        column.DataSource = tableRef; //sets datasource to table referenced by column
        column.DisplayMember = displayMember; //sets displaymember
        column.ValueMember = valueMember; //sets valuemember

        column.HeaderText = headerText; //changes headertext to displayed text

        if (newColumnIndex == 0)
            datagridName.Columns.Add(column); //added to end of datagrid
        else
        {
            datagridName.Columns.RemoveAt(columnIndex);
            datagridName.Columns.Insert(newColumnIndex, column); //added in specific index if needed
        }
    }

Это просто показывает связь с раскрывающимся списком. Очевидно, что много методов используются с большим количеством кода. Но это не проблема, так как работает нормально. Я не знаю, как решить проблему отображения ранее выбранного элемента в качестве текста в поле со списком?

1 ответ

Решение

Похоже, что вы ищете, это DataPropertyName собственность ComboBoxColumn, Это свойство создает связь между DataSource из DataGridView и выбранное значение ComboBoxColumn,

Например, скажем, у вас есть список продуктов, отображаемых в комбинированных полях. Тогда у вас также будет ProductId в вашем DataGridViewDataSource, Что-то вроде этого:

// There Orders is a data table coming from the db which includes the product id column 
dataGridView1.DataSource = Orders;

// You set up your column just the same, with the DisplayMember and ValueMember
DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn();         
GetDisplayAndValueMembers(table, headerText);
column.DataSource = tableRef; //sets datasource to table referenced by column
column.DisplayMember = displayMember; //sets displaymember
column.ValueMember = valueMember; //sets valuemember       
column.HeaderText = headerText; //changes headertext to displayed text   

//Now you also set the DataPropertyName
column.DataPropertyName = "ProductId"; // this is the name of a column or property from the grid datasource

dataGridView1.Columns.Add(column);

С DataPropertyName установить у вас теперь будет привязка данных между ComboBoxColumn и DataGridView,

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

Чтобы установить выбранное значение DataGridViewComboBoxCell все, что вам нужно сделать, это выбрать ячейку, а затем установить ее Value имущество.

dataGridView1.Rows["rowname"].Cells["columnname"].Value = valueFromDb;
Другие вопросы по тегам