これは、WPFまたはWeb TreeViewではなくSystem.Windows.Forms.TreeViewです。.NETでのTreeViewの遅延読み込み
これは難しいとは思えないので、私は何かを逃しているに違いない。
私のフォームにはTreeViewがあります。ツリービューにデータを読み込むためにすべてのデータを読み込むのは非常に遅いので、ユーザーがノードを展開するときに、最上位のノードだけをロードして、子ノードを埋めたいとします。問題は、ノードに子がない場合、ノードの横に+記号が表示されないことです。つまり、展開できません。つまり、子をロードするExpandingイベントを取得できません。 。
年前、PowerBuilderを使用していたときに、HasChildren(または類似の)プロパティをtrueに設定してコントロールに本質的に嘘をつけ、強制的に+を表示して、Expandingイベントを取得できました。子ノードがないときに+を強制的にノードに表示する方法を理解できませんでした。
私は各ノードにダミーノードを追加し、ダミーノードが存在するかどうかを確認してそれを削除して子ノードをロードする方法を試しましたが、ここに入る価値がないさまざまな理由でその解決策は私の状況では実行可能ではありません。
私はグーグルで、C#、ツリービュー、遅延、遅延、負荷、強制、拡張、およびいくつかの他の言葉を使用しています。
P.S.私はSourceForgeでTreeViewAdvプロジェクトを見つけましたが、避けることができれば、新しいコンポーネントを私たちの環境に導入したくないのです。私はまた、次の子供のいないノードに表示するために+を取得する方法を不思議に思っていました
private void Form1_Load(object sender, EventArgs e)
{
// initialise the tree here
var nodeSomething = treeView1.Nodes.Add("Something");
nodeSomething.Nodes.Add("Something below something");
treeView1.AfterExpand += AfterExpand;
}
private void AfterExpand(object sender, TreeViewEventArgs e)
{
foreach (TreeNode node in e.Node.Nodes)
{
// skip if we have already loaded data for this node
if (node.Tag != null)
continue;
node.Tag = new object();
node.Nodes.AddRange(GetDataForThisNode(node));
}
}
私は常にダミーノードメソッドを使用しています。それは一般にかなりうまくいく。なぜそれがあなたのために働かないのかについて私たちにもっと教えていただけますか? – Charlie