我有一個DataGridView其中有3列;數量,費率和金額。
DataGridView是可編輯的。當我在匯率欄中輸入一個值時,立即應該在金額中更改該值。單元格值更改事件,c#
Amount=Qty*rate
它發生,但是當我點擊任何其他細胞,我想,當我在速率輸入任何值應該與數量相乘,並在數額上立即反映在不改變小區。
我有一個DataGridView其中有3列;數量,費率和金額。
DataGridView是可編輯的。當我在匯率欄中輸入一個值時,立即應該在金額中更改該值。單元格值更改事件,c#
Amount=Qty*rate
它發生,但是當我點擊任何其他細胞,我想,當我在速率輸入任何值應該與數量相乘,並在數額上立即反映在不改變小區。
如果您確實想在不更改單元格的情況下更新該值(如在飛行中),則必須處理DataGridView.KeyPress事件並檢查哪個單元正在更新。
如果這太麻煩了,請使用DataGridView.CellValueChanged事件。實現比KeyPress事件更簡單。
正如Sachin Shanbhag提到的那樣,您應該同時使用DataGridView.CurrentCellDirtyStateChanged
和DataGridView.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;
}
}
使用CommitEdit,CurrentCellDirtyStateChanged的確按預期工作,每次在髒狀態發生變化時(即用戶更改字符串)都會觸發它,謝謝Dmitry! – 2013-12-23 09:24:46
我發現沒有事件可以正確處理單元格更改的值。
您必須將可編輯單元格轉換爲文本框,然後在其上提供更改的事件。
這是我發現在瀏覽MSDN論壇的一個代碼:
我也是在這裏添加代碼:
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");
}
你嘗試過哪些活動?嘗試DataGridView.CurrentCellDirtyStateChanged事件 – Thakur 2010-09-29 10:34:11