[英]Setting DataGridView Row Heights Fast
我有一個虛擬的datagridview,我想設置不同的行高。 我希望找到一種方法來同時設置所有行高,而不是一次循環遍歷每個行高。
這是我嘗試設置高度的方法,但性能非常糟糕〜每1000行1秒。 對我來說,平均行數約為20k-30k,因此這是不可接受的。
public void PopulateData()
{
this.SuspendLayout();
this.RowCount = Data.RowCount;
for (int i = 0; i < Data.RowCount; i++)
{
this.Rows[i].Height = Data.RowHeights[i];
}
this.ResumeLayout();
}
我確保首先關閉自動調整大小,但性能仍然很差。
this.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
this.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;
是否有任何方法可以傳入行高度數組或阻止在調整行大小時調用OnRowHeightChanged
?
顯然,如果您獨立於datagridview創建行,則性能阻礙功能不適用。
訣竅是創建一個行數組,調整它們的大小,然后將行范圍添加到datagridview:
public void PopulateData()
{
this.SuspendLayout();
DataGridViewRow[] rows = new DataGridViewRow[Data.RowCount];
for (int i = 0; i < rows.Length; i++)
{
DataGridViewRow row = new DataGridViewRow();
row.Height = Data.RowHeights[i];
rows[i] = row;
}
this.Rows.AddRange(rows);
this.ResumeLayout();
}
對於15,000行,這僅花費150毫秒,相比之下,15秒沒有創建單獨的陣列,速度快100倍!
試試這個而不是你的代碼,看看你是否有任何性能提升。 通常使用虛擬網格,這種方法更快 -
為DataGridView.RowPrePaint
添加處理程序:
dataGridView1.RowPrePaint += new DataGridViewRowPrePaintEventHandler(dataGridView1_RowPrePaint);
private void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
dataGridView1.AutoResizeRow(e.RowIndex);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.