C# 如何使用winforms在多列模式下向TreeViewAdv添加项

C# 如何使用winforms在多列模式下向TreeViewAdv添加项,c#,winforms,treeview,C#,Winforms,Treeview,我在玩一个叫做的控件。我已经添加了控件,并添加了几列,试图了解它是如何工作的。但直到现在,当我向控件添加项时,我得到的只是空节点。控件提供的示例一点也不清楚,当我试图弄清楚数据是如何添加到控件中时,它只是让我头疼。无论如何,这就是我到目前为止所做的,我希望有人能引导我走向正确的方向 TreeModel _model = new TreeModel(); treeViewAdv1.Model = _model; treeViewAdv1.BeginUpdate();

我在玩一个叫做的控件。我已经添加了控件,并添加了几列,试图了解它是如何工作的。但直到现在,当我向控件添加项时,我得到的只是空节点。控件提供的示例一点也不清楚,当我试图弄清楚数据是如何添加到控件中时,它只是让我头疼。无论如何,这就是我到目前为止所做的,我希望有人能引导我走向正确的方向

    TreeModel _model = new TreeModel();
    treeViewAdv1.Model = _model;

    treeViewAdv1.BeginUpdate();
    for (int i = 0; i < 20; i++)
    {

        Node parentNode = new Node("root" + i);
        _model.Nodes.Add(parentNode);

        for (int n = 0; n < 2; n++)
        {
            Node childNode = new MyNode("child" + n);
            parentNode.Nodes.Add(childNode); 
        }

    }

    treeViewAdv1.EndUpdate();
TreeModel\u model=newtreemodel();
treeViewAdv1.Model=\u Model;
treeViewAdv1.BeginUpdate();
对于(int i=0;i<20;i++)
{
节点parentNode=新节点(“根”+i);
_model.Nodes.Add(parentNode);
对于(int n=0;n<2;n++)
{
Node childNode=新的MyNode(“子节点”+n);
parentNode.Nodes.Add(childNode);
}
}
treeViewAdv1.EndUpdate();

总之,我得到的只是空节点,我真的不知道如何向其他列添加数据。。。任何帮助都将不胜感激……

您需要先实例化您的列,然后将它们附加到树视图。毕竟,在同一单元格索引的所有列中添加新单元格。
希望能够提供帮助,以防您仍在为这个问题而挣扎,或者其他人也遇到同样的问题:空节点的解决方案是为树指定一个视图组件

TreeViewAdv使用MVC,它要求您指定一个视图,尽管这在示例项目中并不明显。TreeViewAdv源中nodeControl文件夹下的NodeTextBox类是您可以使用的查看器之一。您需要将其添加到表单中,并通过其DataPropertyName属性将其连接到树控件,如下所示:

this._tBox.DataPropertyName = "Text";
private Aga.Controls.Tree.TreeViewAdv _treeViewAdv;
private Aga.Controls.Tree.TreeColumn Column1;
private Aga.Controls.Tree.TreeColumn Column2;
private Aga.Controls.Tree.TreeColumn Column3;
private Aga.Controls.Tree.NodeControls.NodeTextBox NodeControl1;
private Aga.Controls.Tree.NodeControls.NodeTextBox NodeControl2;
private Aga.Controls.Tree.NodeControls.NodeTextBox NodeControl3;

private InitializeComponent()
{     
    // Left out all other initialization, since this was long enough already.
    this.treeViewAdvPrint = new Aga.Controls.Tree.TreeViewAdv();
    this.Column1 = new Aga.Controls.Tree.TreeColumn();
    this.Column2 = new Aga.Controls.Tree.TreeColumn();
    this.Column3 = new Aga.Controls.Tree.TreeColumn();
    this.NodeControl1 = new Aga.Controls.Tree.NodeControls.NodeTextBox();
    this.NodeControl2 = new Aga.Controls.Tree.NodeControls.NodeTextBox();
    this.NodeControl3= new Aga.Controls.Tree.NodeControls.NodeTextBox();

    // 
    // _treeViewAdv
    // 
    this._treeViewAdv.BackColor = System.Drawing.SystemColors.Window;
    this._treeViewAdv.Columns.Add(this.Column1);
    this._treeViewAdv.Columns.Add(this.Column2);
    this._treeViewAdv.Columns.Add(this.Column3);
    this._treeViewAdv.DefaultToolTipProvider = null;
    this._treeViewAdv.DragDropMarkColor = System.Drawing.Color.Black;
    this._treeViewAdv.GridLineStyle = ((Aga.Controls.Tree.GridLineStyle)((Aga.Controls.Tree.GridLineStyle.Horizontal | Aga.Controls.Tree.GridLineStyle.Vertical)));
    this._treeViewAdv.LineColor = System.Drawing.SystemColors.ControlDark;
    this._treeViewAdv.Location = new System.Drawing.Point(12, 12);
    this._treeViewAdv.Model = null;
    this._treeViewAdv.Name = "_treeViewAdv";
    this._treeViewAdv.NodeControls.Add(NodeControl1);
    this._treeViewAdv.NodeControls.Add(NodeControl2);
    this._treeViewAdv.NodeControls.Add(NodeControl3);
    this._treeViewAdv.SelectedNode = null;
    this._treeViewAdv.Size = new System.Drawing.Size(443, 356);
    this._treeViewAdv.TabIndex = 6;
    this._treeViewAdv.Text = "_treeViewAdv";
    this._treeViewAdv.UseColumns = true;

    // 
    // Column1
    // 
    this.Column1.Header = "Column 1";
    this.Column1.SortOrder = System.Windows.Forms.SortOrder.None;
    this.Column1.TooltipText = null;
    this.Column1.Width = 290;
    // 
    // Column3
    // 
    this.Column3.Header = "Column 3";
    this.Column3.SortOrder = System.Windows.Forms.SortOrder.None;
    this.Column3.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
    this.Column3.TooltipText = null;
    // 
    // Column2
    // 
    this.Column2.Header = "Column 2";
    this.Column2.SortOrder = System.Windows.Forms.SortOrder.None;
    this.Column2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
    this.Column2.TooltipText = null;
    this.Column2.Width = 91;
    // 
    // NodeControl1
    // 
    this.NodeControl1.DataPropertyName = "NodeControl1";
    this.NodeControl1.IncrementalSearchEnabled = true;
    this.NodeControl1.LeftMargin = 3;
    this.NodeControl1.ParentColumn = this.Column1;
    // 
    // NodeControl2
    // 
    this.NodeControl2.DataPropertyName = "NodeControl2";
    this.NodeControl2.IncrementalSearchEnabled = true;
    this.NodeControl2.LeftMargin = 3;
    this.NodeControl2.ParentColumn = this.Column2;
    // 
    // NodeControl3
    // 
    this.NodeControl3.DataPropertyName = "NodeControl3";
    this.NodeControl3.IncrementalSearchEnabled = true;
    this.NodeControl3.LeftMargin = 3;
    this.NodeControl3.ParentColumn = this.Column3;
}

其中tBox是NodeTextBox实例。不用说,我花了几个小时才弄明白。希望它能帮助其他人。

使用这个神奇控件的入门价格似乎是几个小时,几个小时,令人挠头的沮丧

这是您需要做的:

private void Form1_Load(object sender, EventArgs e)
{
    TreeModel _model = new TreeModel();
    treeViewAdv1.Model = _model;

    treeViewAdv1.BeginUpdate();
    for (int i = 0; i < 20; i++)
    {

        Node parentNode = new Node("root" + i);
        _model.Nodes.Add(parentNode);

        for (int n = 0; n < 2; n++)
        {
            Node childNode = new Node("child" + n);
            parentNode.Nodes.Add(childNode);
        }

    }

    NodeTextBox ntb = new NodeTextBox();
    ntb.DataPropertyName = "Text";       
    this.treeViewAdv1.NodeControls.Add(ntb);

    treeViewAdv1.EndUpdate();


}
private void Form1\u加载(对象发送方,事件参数e)
{
TreeModel_model=新的TreeModel();
treeViewAdv1.Model=\u Model;
treeViewAdv1.BeginUpdate();
对于(int i=0;i<20;i++)
{
节点parentNode=新节点(“根”+i);
_model.Nodes.Add(parentNode);
对于(int n=0;n<2;n++)
{
节点子节点=新节点(“子节点”+n);
parentNode.Nodes.Add(childNode);
}
}
NodeTextBox ntb=新的NodeTextBox();
ntb.DataPropertyName=“Text”;
this.treeViewAdv1.nodeControl.Add(ntb);
treeViewAdv1.EndUpdate();
}

显然,这个问题很老了,但我找不到这个问题的任何答案,所以我想我会尽量避免一些人将来的挫折感

要显示多个列,请首先将UseColumns属性更改为true。
然后将所需的列添加到Columns集合属性。
接下来,使用NodeControl集合属性创建将显示的数据类型列表,以及它们的格式(复选框、文本框等)。确保设置1)DataPropertyName(稍后将使用),2)ParentColumn(显示树视图中应该显示数据的列)。 最后,创建一个从Node类继承的新类,并添加一个与每个NodeControl同名的公共属性。然后在添加节点时,使用具有正确值的新类

 private class ColumnNode: Node
        {
            public string NodeControl1="";  // This sould make the DataPropertyName specified in the Node Collection.
            public string NodeControl2 = "";
            public string NodeControl3 = "";
            public ColumnNode(string nodeControl1, string nodeControl2, int nodeControl3)
            {
                NodeControl1 = nodeControl1;
                NodeControl2 = nodeControl2;
                NodeControl3 = nodeControl3.ToString();
            }
        }
然后在添加 TreeModel_model=新的TreeModel()


在这里指出treenodeav.Tag属性的输入是Node.Text属性,而不是Node.Tag,这可能很好。在我看来非常混乱,但过了一会儿我才发现。
private Aga.Controls.Tree.TreeViewAdv _treeViewAdv;
private Aga.Controls.Tree.TreeColumn Column1;
private Aga.Controls.Tree.TreeColumn Column2;
private Aga.Controls.Tree.TreeColumn Column3;
private Aga.Controls.Tree.NodeControls.NodeTextBox NodeControl1;
private Aga.Controls.Tree.NodeControls.NodeTextBox NodeControl2;
private Aga.Controls.Tree.NodeControls.NodeTextBox NodeControl3;

private InitializeComponent()
{     
    // Left out all other initialization, since this was long enough already.
    this.treeViewAdvPrint = new Aga.Controls.Tree.TreeViewAdv();
    this.Column1 = new Aga.Controls.Tree.TreeColumn();
    this.Column2 = new Aga.Controls.Tree.TreeColumn();
    this.Column3 = new Aga.Controls.Tree.TreeColumn();
    this.NodeControl1 = new Aga.Controls.Tree.NodeControls.NodeTextBox();
    this.NodeControl2 = new Aga.Controls.Tree.NodeControls.NodeTextBox();
    this.NodeControl3= new Aga.Controls.Tree.NodeControls.NodeTextBox();

    // 
    // _treeViewAdv
    // 
    this._treeViewAdv.BackColor = System.Drawing.SystemColors.Window;
    this._treeViewAdv.Columns.Add(this.Column1);
    this._treeViewAdv.Columns.Add(this.Column2);
    this._treeViewAdv.Columns.Add(this.Column3);
    this._treeViewAdv.DefaultToolTipProvider = null;
    this._treeViewAdv.DragDropMarkColor = System.Drawing.Color.Black;
    this._treeViewAdv.GridLineStyle = ((Aga.Controls.Tree.GridLineStyle)((Aga.Controls.Tree.GridLineStyle.Horizontal | Aga.Controls.Tree.GridLineStyle.Vertical)));
    this._treeViewAdv.LineColor = System.Drawing.SystemColors.ControlDark;
    this._treeViewAdv.Location = new System.Drawing.Point(12, 12);
    this._treeViewAdv.Model = null;
    this._treeViewAdv.Name = "_treeViewAdv";
    this._treeViewAdv.NodeControls.Add(NodeControl1);
    this._treeViewAdv.NodeControls.Add(NodeControl2);
    this._treeViewAdv.NodeControls.Add(NodeControl3);
    this._treeViewAdv.SelectedNode = null;
    this._treeViewAdv.Size = new System.Drawing.Size(443, 356);
    this._treeViewAdv.TabIndex = 6;
    this._treeViewAdv.Text = "_treeViewAdv";
    this._treeViewAdv.UseColumns = true;

    // 
    // Column1
    // 
    this.Column1.Header = "Column 1";
    this.Column1.SortOrder = System.Windows.Forms.SortOrder.None;
    this.Column1.TooltipText = null;
    this.Column1.Width = 290;
    // 
    // Column3
    // 
    this.Column3.Header = "Column 3";
    this.Column3.SortOrder = System.Windows.Forms.SortOrder.None;
    this.Column3.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
    this.Column3.TooltipText = null;
    // 
    // Column2
    // 
    this.Column2.Header = "Column 2";
    this.Column2.SortOrder = System.Windows.Forms.SortOrder.None;
    this.Column2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
    this.Column2.TooltipText = null;
    this.Column2.Width = 91;
    // 
    // NodeControl1
    // 
    this.NodeControl1.DataPropertyName = "NodeControl1";
    this.NodeControl1.IncrementalSearchEnabled = true;
    this.NodeControl1.LeftMargin = 3;
    this.NodeControl1.ParentColumn = this.Column1;
    // 
    // NodeControl2
    // 
    this.NodeControl2.DataPropertyName = "NodeControl2";
    this.NodeControl2.IncrementalSearchEnabled = true;
    this.NodeControl2.LeftMargin = 3;
    this.NodeControl2.ParentColumn = this.Column2;
    // 
    // NodeControl3
    // 
    this.NodeControl3.DataPropertyName = "NodeControl3";
    this.NodeControl3.IncrementalSearchEnabled = true;
    this.NodeControl3.LeftMargin = 3;
    this.NodeControl3.ParentColumn = this.Column3;
}