1

datagridview の読み込みが非常に遅いです。どうすれば最適化できますか?

datagridview には 4 ~ 5,000 行あります。
いくつかのパラメーターで動的に datagridview を生成する必要があります (データベースからのデータ、列数)。

データベースのテーブル(ID、名前、連絡先)から垂直にこのようなデータグリッドビューを生成する必要があります..

列 1

id お
名前ご
連絡先

これで、 column1の横に任意の数の空の列が存在する可能性があります。

現在、私はこのアプローチに従っています。

  1. 最初にすべての空の列を追加します。
  2. 次に、for ループの反復ごとに 3 つの行を追加します (id、名前、連絡先)。
  3. データベースからデータを取得し、それを として関数に渡していList <string[]> ますGenerateRows

     private void GenerateColumns(int colLen)
        {
            dataGridViewGenerate.Rows.Clear();
            dataGridViewGenerate.Columns.Clear();
    
            DataGridViewColumn col0 = new DataGridViewTextBoxColumn();
            col0.HeaderText = "Employee No. & Name";
            dataGridViewGenerate.Columns.Add(col0);
    
            for (int i = 0; i < colLen; i++)
            {
                DataGridViewColumn col = new DataGridViewTextBoxColumn
                    {
                        HeaderText =
                            (_sTime.AddDays(i)).Day.ToString(CultureInfo.InvariantCulture) + " " +
                            (_sTime.AddDays(i)).ToString("ddd")
                    };
    
                dataGridViewGenerate.Columns.Add(col);
        }
    
    
    private void GenerateRows(List<string[]> empList)
        {
            int len = empList.Count;
            for (int a = 0; a < len; a++)
            {
                string[] arr = empList[a];
                //row 1
                var row1 = new DataGridViewRow();
                row1.Cells.Add(new DataGridViewTextBoxCell
                    {
                        Value = arr[0]
                    });
                dataGridViewGenerate.Rows.Add(row1);
    
                //row 2
                var row2 = new DataGridViewRow();
                row2.Cells.Add(new DataGridViewTextBoxCell
                    {
                        Value = arr[1]
                    });
                dataGridViewGenerate.Rows.Add(row2);
    
                //row3
    
                var row3 = new DataGridViewRow();
                row3.Cells.Add(new DataGridViewTextBoxCell
                    {
                        Value = arr[2]
                    });
                dataGridViewGenerate.Rows.Add(row3);
            }
        }
    

テーブルを作成してデータを入力するSQLでプロシージャを作成することを考えていました。次に、データソースを datagridview に割り当てます。

4

3 に答える 3

2

私がしたことは、行を 1 つずつ追加する代わりに、DataGridView. データからを作成し、DataTableとして に割り当てましDataSourceDataGridView

読み込みのパフォーマンスがDataGridView大幅に向上しました。

于 2013-07-12T02:49:01.707 に答える
0

Rows.Add() の呼び出しは高価です。これは、それを回避するための簡単な変更です。

private void GenerateRows(List<string[]> empList)
{
    List<DataGridViewRow> rows = new List<DataGridViewRow>();
    int len = empList.Count;
    for (int a = 0; a < len; a++)
    {
        string[] arr = empList[a];
        //row 1
        var row1 = new DataGridViewRow();
        row1.Cells.Add(new DataGridViewTextBoxCell{Value = arr[0]});
        /* CHANGED to add to List */
        rows.Add(row1);

        //row 2
        var row2 = new DataGridViewRow();
        row2.Cells.Add(new DataGridViewTextBoxCell{Value = arr[1]});
        /* CHANGED to add to List */
        rows.Add(row2);

        //row3

        var row3 = new DataGridViewRow();
        row3.Cells.Add(new DataGridViewTextBoxCell{Value = arr[2]});
        /* CHANGED to add to List */
        rows.Add(row3);
    }

    /* ADDED all rows at once for performance */
    dataGridViewGenerate.Rows.AddRange(rows.ToArray());
}
于 2013-07-09T17:59:28.743 に答える