Добавление ComboBox в Datagridview

Я нашел способ добавить поле со списком в ячейку DataGridview (Winform), но я не нашел такого события, как ItemDataBound of DataGridView, чтобы установить значение для comboBox. И не знаю, как установить выбранное значение comboBox в свойство DataItem текущей строки (DataGridView) :(

Пожалуйста, дайте мне несколько подсказок, чтобы сделать это задание

Спасибо большое


person Bac Clunky    schedule 21.07.2014    source источник
comment
вы пробовали что-нибудь для этого?   -  person Dhaval Patel    schedule 21.07.2014
comment
вы хотите добавить поле со списком в datagridview   -  person Sathish    schedule 21.07.2014
comment
@DhavalPatel да, я сделал, но не повезло   -  person Bac Clunky    schedule 22.07.2014
comment
@Sathish Да, я имел в виду. Я хочу иметь comboBox в каждой строке DataGridView. Я хочу установить значение comboBox, когда событие привязки данных элемента (не найдено это встроенное событие или подобное, пожалуйста, помогите), и каждый раз, когда пользователь выбирает элемент comboBox, выбранный элемент будет назначен элементу данных имущество   -  person Bac Clunky    schedule 22.07.2014
comment
установить какое значение для поля со списком?   -  person Sathish    schedule 22.07.2014
comment
@Sathish, например: comboBox содержит 2 значения (Мужчины (значение 1), Женщины (значение 2)... если человек X — мужчина, поле со списком выберет Мужчина. Если пользователь выбирает Женщину в поле со списком, необходимо применить значение 2 для этого человека   -  person Bac Clunky    schedule 22.07.2014
comment
если вы выберете значение, которое оно присваивает в этой ячейке, верно?   -  person Sathish    schedule 22.07.2014
comment
@Sathish да, и при перечислении данных в каждом поле со списком также должно быть выбрано соответствующее значение этой ячейки.   -  person Bac Clunky    schedule 22.07.2014
comment
Давайте продолжим обсуждение в чате.   -  person Sathish    schedule 22.07.2014


Ответы (2)


Вы можете использовать метод ниже, чтобы добавить данные в поле со списком в gridview. Если у вас нет списка, вы можете добавить элементы в поле со списком как:

cmbdgv.Items.Add("Test");

private void bindDataToDataGridViewCombo() {
    DataGridViewComboBoxColumn cmbdgv = new DataGridViewComboBoxColumn();
    List<String> itemCodeList = new List<String>();
    cmbdgv.DataSource = itemCodeList;
    cmbdgv.HeaderText = "Test";
    cmbdgv.Name = "Test";
    cmbdgv.Width = 270;
    cmbdgv.Columns.Add(dgvCmbForums);
    cmbdgv.Columns["Test"].DisplayIndex = 0;
}

После добавления, если вы хотите зафиксировать изменение выбора поля со списком, вы можете использовать событие ниже в datagridview.

ComboBox cbm;
DataGridViewCell currentCell;

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    if (e.Control is ComboBox)
    {
        cbm = (ComboBox)e.Control;

        if (cbm != null)
        {
            cbm.SelectedIndexChanged += new EventHandler(cbm_SelectedIndexChanged);
        }

        currentCell = this.dataGridView1.CurrentCell;
    }
}

void cbm_SelectedIndexChanged(object sender, EventArgs e)
{
    this.BeginInvoke(new MethodInvoker(EndEdit));
}


void EndEdit()
{
    if (cbm != null)
    {
        string SelectedItem=cbm.SelectedItem.ToString();
        int i = dataGridView1.CurrentRow.Index;
        dataGridView1.Rows[i].Cells["Test"].Value = SelectedItem;
    }
}
person Hasanthi    schedule 22.07.2014
comment
Обязательно ли добавлять условие if (cbm != null)? - person AlexL; 31.03.2021

Если вы пытаетесь установить значение Combobox в DataGridView, посмотрите, не этот ответ поможет.

Чтобы получить выбранный элемент Combobox (пример):

comboBox.SelectedIndexChanged += new EventHandler(comboBox_ComboSelectionChanged);

private void comboBox_ComboSelectionChanged(object sender, EventArgs e)
      {
            if (myDGV.CurrentCell.ColumnIndex == 5)
            {
                int selectedIndex;
                string selectedItem;

                selectedIndex = ((ComboBox)sender).SelectedIndex;  // handle an error here.
                // get the selected item from the combobox
                var combo = sender as ComboBox;

                if (selectedIndex == -1)
                {
                    MessageBox.Show("No value has been selected");
                }
                else
                {
                    // note that SelectedItem may be null
                    selectedItem = combo.SelectedItem.ToString();

                    if (selectedItem != null)
                    {
                        // Your code
person Kinyanjui Kamau    schedule 21.07.2014
comment
Я имел в виду, что в каждой строке DataGridView есть поле со списком. - person Bac Clunky; 22.07.2014