2012-04-09 151 views
4

我正在玩这个控件,名为TreeViewAdv。我已经添加了控件并添加了一些列,试图了解它是如何工作的。但直到现在,当我添加项目到控件时,我所得到的都是空节点。随控件提供的示例一点都不清楚,当我试图弄清楚数据如何添加到它时,它只是让我头疼。无论如何,这是我迄今为止所做的,我希望有人能指导我走向正确的方向。如何使用winforms在多列模式下将项目添加到TreeViewAdv中

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(); 

无论如何,所有我得到的是空的节点,我真的无法弄清楚如何将数据添加到其他列...任何帮助,将不胜感激......

回答

0

您需要首先实例化您的列,然后将它们附加到TreeView。毕竟在同一个单元索引的所有列中添加新的单元格。 希望能帮到

+1

你能举个例子吗?我真的不知道如何做到这一点 – SolidSnake 2012-04-09 12:52:53

0

为防万一你还在为这个问题而努力,或者其他任何人都遇到同样的问题:空节点的解决方案是将一个视图组件分配给树。

TreeViewAdv使用MVC,它需要你分配一个视图,尽管这在示例项目中并不明显。 TreeViewAdv源代码中的NodeControls文件夹下的NodeTextBox类是您可以使用的查看器之一。你需要像这样添加到您的形式,并将其连接到树控件通过其DataPropertyName属性:

this._tBox.DataPropertyName = "Text"; 

其中_tBox是NodeTextBox实例。毋庸置疑,我已经花了数小时弄清楚了这一点。希望它可以帮助别人。

2

似乎使用这个梦幻般的控制进入的价格是几个小时,头几个小时,抓挠挫折。

这就是你需要做什么:

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(); 


} 
2

显然这个问题是旧的,但我无法找到这个问题的任何答案,所以我想我会尽量节约一些未来的无奈。

要获得多列显示,首先将UseColumns属性更改为true。
然后将所需的柱添加到Columns集合属性中。
接下来使用NodeControls集合属性创建将要显示的数据类型列表,以及它们应该如何格式化(复选框,文本框等)。确保设置1)DataPropertyName(稍后会用到),2)ParentColumn(显示treeView中的哪一列应显示数据) 最后,创建一个从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()时;

_treeViewAdv.Model = _model; 
_treeViewAdv.BeginUpdate(); 
for (int i = 0; i < 20; i++) 
{ 

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

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

} 
_treeViewAdv.EndUpdate(); 

作为参考,本例中treeViewAdv的设计器代码如下所示:

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; 
} 
相关问题