2011-05-11 50 views
5

根據設計要求,用戶無法直接編輯datagridview。它處於只讀模式。當用戶雙擊單元格時,datagridview的只讀屬性將變爲false,並且該單元格接受鍵盤輸入。但是,原始鍵盤輸入需要在進入單元格之前進行格式化。因此,我攔截KeyPress事件如下:動態修改時Datagridview單元格值未更新

private void dgw_keyPress(object sender, KeyPressEventArgs e) 
{ 
    e.Handled = true; 
} 

此時單元處於編輯模式和髒模式。然後我用另一種方法更新Value屬性,並調用dgw.Refresh(),它應該在單元上顯示更新的值。但它不會。它只會在當前單元格不髒並且不處於編輯模式時更新。當它仍處於編輯模式時,如何強制單元格顯示更新值?

任何想法?

+0

InvalidateCell()? – Dmitry 2011-05-11 04:44:57

+0

您想要實現的功能不是很清楚,您如何捕獲「keypress」事件,然後修改輸入並將其分配給網格。請發佈所有相關的代碼,這不會給出導致問題的whatz的任何見解。 – V4Vendetta 2011-05-11 05:13:45

+0

我試圖在沒有運氣的情況下對datagridview控件執行InvalidateCell()UpdateCellValue()和Refresh()。 我攔截並忽略了控件的關鍵事件。相反,我有一個記錄擊鍵的鍵盤鉤子。我採取由鍵盤鉤子捕獲的關鍵事件,修改值並將它們顯示在DGW單元上。 – Thracian 2011-05-11 19:19:49

回答

0

嘗試DataGridView.EndEdit方法。

提交併結束當前單元格的編輯操作。

+0

謝謝你的建議,但它沒有幫助。我想到了一個解決方法。將焦點移出已編輯的單元格會自動刷新其中的數據。然後我把焦點放回到那個單元,這是現在足夠好的解決方案。有一個很小的閃爍,這是唯一的問題。 – Thracian 2011-05-13 14:09:30

11

用如下刷新當前單元格的值,更改以適應您的使用編輯類型

if (dgvMain.EditingControl is TextBox) 
{ 
    dgvMain.EditingControl.Text = dgvMain.CurrentCell.Value.ToString(); 
} 

另一種方法:

調用此方法來強制細胞中更新其顯示值編輯 模式。當外部進程修改單元值 並且您想要通知用戶該更改時(即使因用戶指定的更改而丟失)時,此功能很有用。 details

dgvMain.RefreshEdit(); 
+0

謝謝你的回答。雖然3歲的答案。它幫助我喜歡達到命運。 – 2015-08-25 12:05:50

0

我解決了下面的代碼。

GrdBudgetTabOver.EndEdit() 
相關問題