亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 DataGridRowPostPaint 事件到達 datagridview

如何使用 DataGridRowPostPaint 事件到達 datagridview

PHP
守著星空守著你 2024-01-20 21:44:05
我使用 Windows 應用程序 C# 在 datagridview 中有項目,并且創建了事件DataGrid_RowPostPaint來為 datagridview 中的每一行生成序列號?,F在,當我保存數據時,它正在保存,但沒有從窗口退出并掛起,我使用斷點來跟蹤為什么它在保存后掛起,然后我發現它在這個事件中循環,并且在到達最后一行時不退出數據網格視圖。這是代碼:private void TestsDataGrid_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e){    this.TestsDataGrid.Rows[e.RowIndex].Cells["Serial"].Value = (e.RowIndex + 1).ToString();}如何更新事件中的代碼以退出事件并在到達 datagridview 中的最后一行時結束循環。
查看完整描述

2 回答

?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

您的應用程序掛起,因為更改繪制事件中的值將導致無限循環。


該事件RowPostPaint在繪制行后調用。如果更改單元格值,則必須再次調用它才能顯示新值!


也許將該代碼移至其他事件CellValueChanged!以下是在第一列中的單元格第一次更改后將第二個單元格值設置為當前秒的示例:


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";

}

請適應您的條件等等!


總結一下:您使用了錯誤的事件來更改單元格值!- 不要更改 Paint 事件中的任何單元格值!


查看完整回答
反對 回復 2024-01-20
?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

繪制事件通常由Windows應用程序系統管理器的頂級事件處理程序調用。


每次控件刷新其內容時都會執行此操作。


例如,當移動或調整表單大小、將鼠標移到控件上、從上到下傳遞 z 順序時,就會完成此操作...


這就是為什么它看起來像是一個循環。


您可以使用方法開頭的標志來定義不想繪畫的條件:


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;

從數據庫加載數據后,在代碼中的某個位置編寫:


paintRequired = true;

TestsDataGrid.Refresh();

paintRequired = false;

每次數據更改時都執行此操作。


但您應該使用計算列:


查看完整回答
反對 回復 2024-01-20
  • 2 回答
  • 0 關注
  • 190 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號