簡體   English   中英

快速設置DataGridView行高

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM