2013-06-04 77 views
0

我想在datagridview中執行一個動作,就像計算一樣。當用戶在文本框中輸入金額時,我想計算其分期付款。問題是我在我的datagridview中也有一個組合框。當我從網格組合框中選擇一些東西時,我的代碼中出現異常,所以我想在用戶單擊組合框時停止執行我的計算。
我怎麼知道用戶是否點擊過或從組合框中選擇了某些東西?哪個控件在datagridview中被點擊

private void prol04DataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
{ 
    TextBox tx = e.Control as TextBox; 
    // Below line i am geting error Because i select combobox in datagrid 
    DataGridViewTextBoxCell cell = DataGridViewTextBoxCell)prol04DataGridView.CurrentCell; 
    if (tx != null && cell.OwningColumn == prol04DataGridView.Columns[5]) 
    { 
     tx.TextChanged -= new EventHandler(tx_TextChanged); 
     tx.TextChanged += new EventHandler(tx_TextChanged); 
    }    
} 

那麼我怎麼才能找到哪個控件在datagrid上讓用戶執行一個動作?

+0

該'TX == null'應該提示它不是一個'TextBox'細胞的事實。 – SimpleVar

+0

@Steve execption是'無法將類型爲'System.Windows.Forms.DataGridViewComboBoxCell'的對象類型爲'System.Windows.Forms.DataGridViewTextBoxCell'。' – Abhishek

回答

2

應用用於將e.Control投射到一個TextBox相同的邏輯也向CurrentCell

TextBox tx = e.Control as TextBox; 
DataGridViewTextBoxCell cell = prol04DataGridView.CurrentCell as DataGridViewTextBoxCell; 
if (tx != null && cell != null && cell.OwningColumn == prol04DataGridView.Columns[5]) 
{ 
     tx.TextChanged -= new EventHandler(tx_TextChanged); 
     tx.TextChanged += new EventHandler(tx_TextChanged); 

} 
+0

我已經upvoted,因爲這是正確的,但我可以建議添加可以獲取當前單元格的列索引或擁有列,並使用它來檢查您是否在正確的列中。如果(例如)您必須使用文本框列,並且只想使用其中一列,那麼這很有用。 –

+0

感謝它對我的工作我已upvote你的答案:)但如果我想知道哪種類型的單元格被點擊,我怎麼知道。 – Abhishek