2016-08-11 3 views
0

私はDatagridに8列あります。 8列目はコンボボックスです。私はこのためにDataGridViewComboBoxColumnを定義しました。私はそのコンボボックスに "id"と "Name"を持っています。私は項目を選択したい場合はDataGridのコンボボックスから値を選択する方法

今、私は2つの質問

私が使用できるイベント
  1. を持って、その後すぐにトリガします。 CellValueChangedイベントは、クリックした後にのみトリガされます。

  2. CurrentCellDirtyStateChangedが見つかりましたが、これは私に "id"を与えていません。それは私にdatagrid.CurrentCell.EditedFormattedValueを使って "名前"だけを与えます。 「ID」を取得する方法

私の目的は、「ID」とすぐにいくつかのいずれかのように項目を選択を取得することです。これに関する助けを前にありがとう。

答えて

0

私は解決策を得ました。他の解決策がある場合、あなたは歓迎されている

私は、この使用してイベントハンドラを得た。..ちょうど

コンボボックスに項目を追加した後//私たちは、DataGridViewののこれらのイベントを処理します

は、以下の行を追加します。新しいデータグリッドビューを作成するには、新しいデータグリッドビューの編集コントロールを表示する }

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(); 
      } 
     } 
    } 
} 
関連する問題