2016-08-11 77 views
0

我在Datagrid中有8列。第八列是組合框。我爲此定義了一個DataGridViewComboBoxColumn。我對該組合框有「id」和「Name」。如何在DataGrid中從組合框中選擇值

現在我有兩個問題

  1. 哪個事件,如果我要選擇一個項目,我可以使用,則立即觸發。 CellValueChanged事件只在點擊某處後觸發。

  2. 我發現CurrentCellDirtyStateChanged,但這不是給我「身份證」。它通過使用datagrid.CurrentCell.EditedFormattedValue給我提供了「名稱」如何獲得「身份證號碼」

我的目的是儘快獲得「身份證」,只要有人選擇一個項目。提前感謝您的幫助。

回答

0

我得到了一個解決方案。如果有任何其他的解決方案,歡迎您

我得到這個使用事件處理..

只是將項目添加到組合框

後添加下面一行//我們將處理DataGridView中的這些事件 dataGridView1.CellEndEdit + = new 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(); 
      } 
     } 
    } 
} 
相關問題