2016-08-11 5 views
0

У меня есть 8 столбцов в Datagrid. 8-я колонна - комбинированный блок. Для этого я определил DataGridViewComboBoxColumn. У меня есть «id» и «Name» в этом поле со списком.Как выбрать значение из Combo Box в DataGrid

Теперь у меня есть два вопроса

  1. Какое событие я могу использовать, если я хочу, чтобы выбрать элемент, а затем сразу же вызывает. Событие CellValueChanged запускается только после нажатия кнопки где-либо.

  2. Я нашел CurrentCellDirtyStateChanged, но это не дает мне «id». Это дает мне только «имя», используя datagrid.CurrentCell.EditedFormattedValue; Как получить «ID»

Моя цель - получить «идентификатор», как только кто-то выбирает элемент. Заранее спасибо за любую помощь по этому поводу.

ответ

0

У меня есть решение. Если есть какое-либо другое решение вы можете

Я получил это с помощью обработчика событий ..

добавить строку ниже только после добавления элементов в комбинированном окно

// Мы будем рассматривать эти события DataGridView dataGridView1.CellEndEdit + = новый DataGridViewCellEventHandler (dataGridView1_CellEndEdit); dataGridView1.EditingControlShowing + = новый DataGridViewEditingControlShowingEventHandler (dataGridView1_EditingControlShowing); }

void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
    { 
     if (cbm != null) 
     { 
      // Here we will remove the subscription for selected index changed 
      cbm.SelectedIndexChanged -= new EventHandler(cbm_SelectedIndexChanged); 
     } 
    } 

    void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     // Here try to add subscription for selected index changed event 
     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) 
    { 
     // Invoke method if the selection changed event occurs 
     BeginInvoke(new MethodInvoker(EndEdit)); 
    } 

    void EndEdit() 
    { 
     // Change the content of appropriate cell when selected index changes 
     if (cbm != null) 
     { 
      DataRowView drv = cbm.SelectedItem as DataRowView; 
      if (drv != null) 
      { 
       this.dataGridView1[currentCell.ColumnIndex + 1, currentCell.RowIndex].Value = drv[2].ToString(); 
       this.dataGridView1.EndEdit(); 
      } 
     } 
    } 
} 
Смежные вопросы