2 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個贊
您的應(yīng)用程序掛起,因?yàn)楦睦L制事件中的值將導(dǎo)致無限循環(huán)。
該事件RowPostPaint在繪制行后調(diào)用。如果更改單元格值,則必須再次調(diào)用它才能顯示新值!
也許將該代碼移至其他事件CellValueChanged!以下是在第一列中的單元格第一次更改后將第二個單元格值設(shè)置為當(dāng)前秒的示例:
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
int col1 = 0;
int col2 = 1;
if (e.ColumnIndex == col1 && dataGridView1[col1 , e.RowIndex] == null)
dataGridView1[col2 , e.RowIndex].Value = DateTime.Now.Second + "s";
}
請適應(yīng)您的條件等等!
總結(jié)一下:您使用了錯誤的事件來更改單元格值!- 不要更改 Paint 事件中的任何單元格值!

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個贊
繪制事件通常由Windows應(yīng)用程序系統(tǒng)管理器的頂級事件處理程序調(diào)用。
每次控件刷新其內(nèi)容時都會執(zhí)行此操作。
例如,當(dāng)移動或調(diào)整表單大小、將鼠標(biāo)移到控件上、從上到下傳遞 z 順序時,就會完成此操作...
這就是為什么它看起來像是一個循環(huán)。
您可以使用方法開頭的標(biāo)志來定義不想繪畫的條件:
private void TestsDataGrid_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
if ( !paintRequired ) return;
this.TestsDataGrid.Rows[e.RowIndex].Cells["Serial"].Value = (e.RowIndex + 1).ToString();
}
在表單加載上放置:
paintRequired = true;
從數(shù)據(jù)庫加載數(shù)據(jù)后,在代碼中的某個位置編寫:
paintRequired = true;
TestsDataGrid.Refresh();
paintRequired = false;
每次數(shù)據(jù)更改時都執(zhí)行此操作。
但您應(yīng)該使用計算列:
- 2 回答
- 0 關(guān)注
- 213 瀏覽
添加回答
舉報