2013-07-16 62 views
0

的組合框值我有一個DataGridView與一個ComboBox柱和一個TextBox柱動態創建如下啓用或禁用文本框基於的DataGridView

DataGridViewComboBoxColumn dcColor = new DataGridViewComboBoxColumn(); 
dcColor.HeaderText = "Color"; 
dcColor.Items.Add("Red"); 
dcColor.Items.Add("Green"); 

DataGridViewTextBoxColumn dcValue = new DataGridViewTextBoxColumn(); 
dcValue.HeaderText = "Value"; 

DataGridView1.Columns.Insert(0, dcColor); 
DataGridView1.Columns.Insert(1, dcValue); 

現在,如果用戶在ComboBox選擇「紅色」的項目,然後相應的文本框單元格應該被禁用,並且應該以灰色顯示。
如果用戶選擇「綠色」項目,則應啓用相應的文本框單元格。

另外我們如何確保用戶在關閉datagridview表單前選擇綠色時輸入數據。

+0

如何使用EditingControlShowing事件,可以捕獲兩個值/文本框和組合框的性質和所提到執行。 –

回答

0

下面的代碼工作在項目的選擇在ComboBox

private void _DataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
{ 
    if ((sender as DataGridView).SelectedCells[0].GetType() == typeof(DataGridViewComboBoxCell)) 
    { 
     if ((e.Control as ComboBox) != null) 
     { 
      (e.Control as ComboBox).SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged); 
      (e.Control as ComboBox).SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged); 
     } 
    } 
} 

private void ComboBox_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if ((sender as ComboBox).SelectedItem.ToString() == "Red") 
    { 
     _DataGridView.Rows[_DataGridView.CurrentCell.RowIndex].Cells[1].ReadOnly = true; 
    } 
    else 
    { 
     _DataGridView.Rows[_DataGridView.CurrentCell.RowIndex].Cells[1].ReadOnly = false; 
    } 
} 
0

使用DataGridView的CellValueChanged事件來檢查是否有任何單元格值發生更改。這對於TextBoxColumn或ComboBoxColumn的所有列類型都是相同的。

檢查正確的列,在您的示例中顏色列插入位置0. 將您示例中索引1的其他列設置爲僅在選擇「紅色」時讀取。

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) { 
    if (e.ColumnIndex == 0) { 
     bool disable = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString() == "Red"; 
     dataGridView1.Rows[e.RowIndex].Cells[1].ReadOnly = disable; 
    } 
} 

第二個問題的答案是使用Form的FormClosing事件並驗證那裏的行。如果數據不正確,您可以通過設置e.Cancel = true取消關閉請求。

相關問題