3

私のコードは次のようになります。

private void dataGridView4_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
        {
            Records recordsTmp  = null;
            recordsTmp = (Records)this.ArrayOfRecords[e.RowIndex]; //ArrayList with string[] objects inside


            switch (dataGridView4.Columns[e.ColumnIndex].HeaderText)
            {
                case "#":
                    e.Value = recordsTmp.nr;
                    break;
                case "ip":
                    e.Value = recordsTmp.Ip;
                    break;
                case "long":
                    e.Value = recordsTmp.Long;
                    break;
                case "3":
                    e.Value = recordsTmp.type;
                    break;
                case "4":
                    e.Value = recordsTmp.time;
                    break;
            }
  • ArrayOfRecordsstring[]毎秒10 ~ 100 個の新しいオブジェクトで更新されます。
  • VirtualMode真に設定されています。
  • SelectionModeに設定されていFullRowSelectます。
  • dataGridView読み取り専用です。

現在、5000行以上のスクロールがフリーズすると言うことを示すProgressBarwithスタイルもありますが、それはスレッド/バックグラウンドワーカーなどの問題だと思います.MarqueeForm

私が最も恐れているのは、選択です。8000 行あり、最後の行 (8000)をクリックすると、フォームを選択するのに 4.2 秒かかります。そして、その次のとおりです。

4000 行では 2.1 秒、などです。8000 番目の行を最小化してから最大化を選択すると、4.2 秒かかります。行 1 を選択すると、再び幸せになります。受け入れられない。*私の 8000 番目の行を「マーク」するのが難しいのはなぜFormですか?

VirtualMode のページネーションは完璧に機能しますが、選択が面倒です。

別の問題/動作もあります:

CellValueNeededマウスを行の上に移動するとイベントが発生するのはなぜですか? 彼らはすでに塗装されていますか?では、なぜリソースを浪費しているのでしょうか。

この選択問題の解決策はありますか? または、データグリッドの最大レコード数を制限する必要があります

4

1 に答える 1

3

やりたいことの 1 つは、セルの自動サイズ変更です。これは、グリッドビューがすべてのセルを調べて、最も長いセルを見つける必要があるためです。自動サイズ変更を無効にする必要があり、プログラムで行う必要があります。選択の問題について: 選択すると多くの再描画が発生します。私の推測では、すべてのセルが再描画されるため、ラグは行/セル数に比例します。

仮想モードを使用するには、VirtualMode を true に設定するだけでは不十分です。おそらく遅延の原因であるため、dataGridView1_RowsAdded、dataGridView1_CellValuePushed、および dataGridView1_CellValidating メソッドを確認することは興味深いでしょう。

于 2012-02-19T09:35:26.967 に答える