2010-09-29 88 views
2

我有一個DataGridView其中有3列;數量,費率和金額。
DataGridView是可編輯的。當我在匯率欄中輸入一個值時,立即應該在金額中更改該值。單元格值更改事件,c#

Amount=Qty*rate 

它發生,但是當我點擊任何其他細胞,我想,當我在速率輸入任何值應該與數量相乘,並在數額上立即反映在不改變小區。

+0

你嘗試過哪些活動?嘗試DataGridView.CurrentCellDirtyStateChanged事件 – Thakur 2010-09-29 10:34:11

回答

0

如果您確實想在不更改單元格的情況下更新該值(如在飛行中),則必須處理DataGridView.KeyPress事件並檢查哪個單元正在更新。

如果這太麻煩了,請使用DataGridView.CellValueChanged事件。實現比KeyPress事件更簡單。

4

正如Sachin Shanbhag提到的那樣,您應該同時使用DataGridView.CurrentCellDirtyStateChangedDataGridView.CellValueChanged事件。在DataGridView.CurrentCellDirtyStateChanged你應該檢查用戶是否修改正確的單元格(在你的情況),然後執行DataGridView.CommitEdit方法。這是一些代碼。

private void YourDGV_CurrentCellDirtyStateChanged(object sender, EventArgs e) 
{ 
    if (YourDGV.CurrentCell.ColumnIndex == rateColumnIndex) 
    { 
     YourDGV.CommitEdit(DataGridViewDataErrorContexts.Commit);       
    } 
} 

private void YourDGV_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
{ 
    if (e.ColumnIndex == rateColumnIndex) 
    { 
     DataGridViewTextBoxCell cellAmount = YourDGV.Rows[e.RowIndex].Cells[amountColumnIndex]; 
     DataGridViewTextBoxCell cellQty = YourDGV.Rows[e.RowIndex].Cells[qtyColumnIndex]; 
     DataGridViewTextBoxCell cellRate = YourDGV.Rows[e.RowIndex].Cells[rateColumnIndex]; 
     cellAmount.Value = (int)cellQty.Value * (int)cellRate.Value; 
    } 
} 
+0

使用CommitEdit,CurrentCellDirtyStateChanged的確按預期工作,每次在髒狀態發生變化時(即用戶更改字符串)都會觸發它,謝謝Dmitry! – 2013-12-23 09:24:46

1

我發現沒有事件可以正確處理單元格更改的值。

您必須將可編輯單元格轉換爲文本框,然後在其上提供更改的事件。

這是我發現在瀏覽MSDN論壇的一個代碼:

http://social.msdn.microsoft.com/Forums/windows/en-US/a56ac5c1-e71f-4a12-bbfa-ab8fc7b36f1c/datagridview-text-changed?forum=winformsdatacontrols

我也是在這裏添加代碼:

void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 

{ 

    if (dataGridView1.CurrentCell.ColumnIndex == 0) 
    { 

     TextBox tb = (TextBox)e.Control; 
     tb.TextChanged += new EventHandler(tb_TextChanged); 
    } 
} 

void tb_TextChanged(object sender, EventArgs 
{ 
    MessageBox.Show("changed"); 
} 
相關問題