2016-08-11 5 views
0

DataGrid에 8 개의 열이 있습니다. 여덟 번째 열은 콤보 상자입니다. 이를 위해 DataGridViewComboBoxColumn을 정의했습니다. 그 콤보 상자에 "id"와 "Name"이 있습니다.DataGrid의 콤보 상자에서 값을 선택하는 방법

지금 나는 두 가지 질문

이벤트 내가 항목을 선택하려면 내가 사용할 수 있습니다
  1. 을 가지고 즉시 트리거합니다. CellValueChanged 이벤트는 일부를 클릭 한 후에 만 ​​트리거됩니다.

  2. CurrentCellDirtyStateChanged가 발견되었지만 "id"가 부여되지 않았습니다. 그것은 날 "datagrid.CurrentCell.EditedFormattedValue를 사용하여"이름을 제공합니다; "ID"를 얻는 방법

내 목적은 어떤 항목을 선택하자 마자 "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(); 
      } 
     } 
    } 
} 
관련 문제