2009-09-12 5 views
0

Windowsフォームに表示する必要がある大きなデータベーステーブルがあります。データは、ユーザーにツリービューのような構造で表示する必要がある「カテゴリリスト」のようなものです。サブカテゴリが多いカテゴリがあります。ツリービューコントロールには読み込み遅延がありますが、問題は10個のルートノードと4個の列文字列値がある可能性があることです。ツリービューに100000ノードを追加しようとしましたが、完了するまでに5分かかりました。そのような操作のための他のオプションはありますか?私に何かアイデアを教えてもらえますかには、ツリービューであるがありません。大量のデータを高速に表示する方法

答えて

0

私は、ツリービューの仮想/サーバモードを実装することに決めました。

お返事ありがとうございます。

2

これはノードがたくさんありますが、ツリービューにノードのリストを追加したときにBeginUpdate()とEndUpdate()を呼び出してみましたか?それはおそらく少しあなたのパフォーマンスをもたらすでしょう!このようなアプリケーションのために

http://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.beginupdate.aspx

、私は彼らがテキストボックスに入力されているとして、カテゴリ名を返すように「あなたが入力する検索」などの機能を実装する傾向があります。たとえば、各キーストロークで、私はDBに戻って、テキストボックスにあるもので始まるトップ10程度の値を返します。結果が10件を超えている場合は、結果がより多いことを示しているか、検索結果を絞り込むように指示します。 IMOの直接検索は常にソートやページングよりも優先されます。私はページングが嫌いです。ほとんどの場合、検索機能が十分に機能していないことを認めています。

1

おそらく、何らかの種類のページングメカニズムを実装します。 TreeViewの100,000個のアイテムは、ユーザーの観点から読むのが非常に難しいでしょう。一度に1,000またはそれ以下のルートノードを提供するだけで、確実にロード時間が短縮されます。

1

キャッシュ機能を使用できます。 20000レコードには一般に0.2秒かかります。それを使用するには言語サポートを確認してください。

について、

1

TreeViewにはBeforeExpandというイベントがあります。これを使用して、どのノードコンテンツをロードするかを決定することができます。つまり、最初にTreeViewのトップレベルノードのみをロードします。

ユーザーがノードを展開しようとしている場合、必要なデータをフェッチして、そのノードのサブノードを埋めることができます。 TreeNodeのTagプロパティを使用して、データがどのノードに属するIDを格納します。

ノードがはるかに高速であるため、BeginUpdate()とEndUpdate()を使用するか、Add()の代わりにAddRange()を使用してノードを追加してください。

関連する問題