C# 如何使用图像创建多列树状视图

C# 如何使用图像创建多列树状视图,c#,winforms,treeview,treelist,C#,Winforms,Treeview,Treelist,我有个问题。我正在使用BrightIdeasSoftware.TreeListView在我的windows窗体中创建treeview,我也参考了,但我没有成功创建它。你能告诉我我在创建树视图时犯了什么错误吗。完整的描述如下 我想添加动态可折叠面板,并在其中添加树 数据将根据可折叠面板标题id显示在面板中 我有一个父id,可以有多个子id “状态”列将显示一个图像 下面是我用来创建treeview的代码 class Node { public strin

我有个问题。我正在使用
BrightIdeasSoftware.TreeListView
在我的windows窗体中创建treeview,我也参考了,但我没有成功创建它。你能告诉我我在创建树视图时犯了什么错误吗。完整的描述如下

  • 我想添加动态可折叠面板,并在其中添加树
  • 数据将根据可折叠面板标题id显示在面板中
  • 我有一个父id,可以有多个子id
  • “状态”列将显示一个图像
下面是我用来创建treeview的代码

class Node
        {
            public string Name { get; private set; }
            public string Column1 { get; private set; }
            public string Column2 { get; private set; }

            public List<Node> Children { get; private set; }

            public Node(string name, string col1, string col2)
            {
                this.Name = name;
                this.Column1 = col1;
                this.Column2 = col2;
                this.Children = new List<Node>();
            }
        }



private void InitializeFristTabValue()
    {
        if (_UserDAC == null)
            _UserDAC = new UserDAC();
        try
        {
            DataTable dtUserGroup = _UserDAC.GetAllSECGROUPS(appDirectory, this.FindForm().Name, "InitializeFristTabValue()").Tables[0];
            CommonDataGridBind cc = new CommonDataGridBind();
            cc.GridviewGrouping(dtUserGroup, kryptonOutlookGridUserGroup, true, "GROUPID");
            DataTable SEC_Info = _UserDAC.GetSECAPPINFO(appDirectory, this.FindForm().Name, "InitializeFristTabValue()").Tables[0];
            int Location = 0;
            foreach (DataRow dtrow in SEC_Info.Rows)
            {


                int APPID;
                int.TryParse(dtrow["APPID"].ToString(), out APPID);
                collapsiblePanelobj = new CollapsiblePanel();

                if (Location == 0)
                {
                    collapsiblePanelobj.Collapse = false;
                    //collapsiblePanelobj.Dock = System.Windows.Forms.DockStyle.Fill;
                    this.collapsiblePanelobj.Size = new System.Drawing.Size(1000, 150);
                    //DataTable SEC_InfoTreeView = _UserDAC.GetAPPITEMSbyAPPID(APPID, appDirectory, this.FindForm().Name, "InitializeFristTabValue()").Tables[0];

                    // ADDNode(APPID);
                    treeListView1.Dock = System.Windows.Forms.DockStyle.Fill;
                    //_panelBox.Anchor = AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom | AnchorStyles.Left;
                    //_panelBox.Controls.Add(treeListView1);
                    //collapsiblePanelobj.Controls.Add(_panelBox);
                    collapsiblePanelobj.Controls.Add(treeListView1);
                }
                else
                    collapsiblePanelobj.Collapse = true;
                Location = Location + 30;
                collapsiblePanelobj.Name = dtrow["APPNAME"].ToString() + dtrow["APPID"].ToString();
                collapsiblePanelobj.HeaderText = "PROGRAM: " + dtrow["APPNAME"].ToString();

                collapsiblePanelobj.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                | System.Windows.Forms.AnchorStyles.Left)
                | System.Windows.Forms.AnchorStyles.Right)));
                collapsiblePanelobj.BackColor = System.Drawing.Color.Transparent;
                collapsiblePanelobj.HeaderCornersRadius = 5;
                collapsiblePanelobj.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold);
                collapsiblePanelobj.HeaderImage = null;
                collapsiblePanelobj.HeaderTextColor = System.Drawing.Color.Black;
                collapsiblePanelobj.Location = new System.Drawing.Point(10, Location);
                collapsiblePanelobj.RoundedCorners = true;
                //this.collapsiblePanelobj.Dock = System.Windows.Forms.DockStyle.Fill;
                this.collapsiblePanelobj.Size = new System.Drawing.Size(1000, 150);
                collapsiblePanelobj.UseAnimation = true;
                InitializeData(APPID);
                FillTree();
                AddTree();

                panel1.Controls.Add(collapsiblePanelobj);
                // GrpBoxUserGroupInfo.Controls.Add(collapsiblePanelobj);
            }
        }
        catch (Exception ex)
        {
            LogsWrite(ex, appDirectory, this.FindForm().Name, "InitializeFristTabValue()");
        }
    }

 public void ADDNode()
        {
            AddTree();

            InitializeData();
            FillTree();

        }

  private void AddTree()
        {
            treeListView1 = new BrightIdeasSoftware.TreeListView();
            treeListView1.Dock = DockStyle.Fill;
            this.Controls.Add(treeListView1);
        }

 private void InitializeData()
        {
            UserDAC _UserDAC = new UserDAC();
            DataTable SEC_InfoTreeView = _UserDAC.GetAPPITEMSbyAPPID(2, "", this.FindForm().Name, "InitializeFristTabValue()").Tables[0];
            data = new List<Node> {};
            var parent1 = new Node("User Name                         ", "State                  ", "Static Caption             ");

                for (int i = 0; i < SEC_InfoTreeView.Rows.Count; i++)
                {
                    int PrentID = Convert.ToInt32(SEC_InfoTreeView.Rows[i]["PARENTID"]);
                    if (PrentID == 0 && Convert.ToInt32(SEC_InfoTreeView.Rows[i]["INDENT"]) == 0)
                    {
                        data.Add(parent1);
                        var parentAdd = new Node(Convert.ToString(SEC_InfoTreeView.Rows[i]["USERNAME"]), "", Convert.ToString(SEC_InfoTreeView.Rows[i]["ACAPTION"]));
                        parent1 = parentAdd;
                    }
                    else if (PrentID != 0 && Convert.ToInt32(SEC_InfoTreeView.Rows[i]["INDENT"]) == 2)
                    {
                        parent1.Children.Add(new Node(Convert.ToString(SEC_InfoTreeView.Rows[i]["USERNAME"]), "", Convert.ToString(SEC_InfoTreeView.Rows[i]["ACAPTION"])));

                    }
                }

        }

 private void FillTree()
    {
       // this.treeListView.SmallImageList = imageList1;
        // set the delegate that the tree uses to know if a node is expandable   
       // treeListView1.Margin = new System.Windows.Forms.Padding(2, 1000, 2, 2);
        treeListView1.CanExpandGetter = x => (x as Node).Children.Count > 0;

        // set the delegate that the tree uses to know the children of a node
        treeListView1.ChildrenGetter = x => (x as Node).Children;

        // create the tree columns and set the delegates to print the desired object proerty
        var nameCol = new BrightIdeasSoftware.OLVColumn("User Name", "Name");
        nameCol.AspectGetter = x => (x as Node).Name;
        nameCol.Width = treeListView1.Width / 3;

        var col1 = new BrightIdeasSoftware.OLVColumn("State", "Column1");
        col1.AspectGetter = x => (x as Node).Column1;
        col1.Width = treeListView1.Width / 3;
        var col2 = new BrightIdeasSoftware.OLVColumn("Static Caption", "Column2");
        col2.AspectGetter = x => (x as Node).Column2;
        col2.Width = treeListView1.Width / 3;
        // add the columns to the tree


        treeListView1.Columns.Add(nameCol);
        treeListView1.Columns.Add(col1);
        treeListView1.Columns.Add(col2);

        // set the tree roots
        this.treeListView1.Roots = data;



    }
类节点
{
公共字符串名称{get;private set;}
公共字符串Column1{get;private set;}
公共字符串Column2{get;private set;}
公共列表子项{get;private set;}
公共节点(字符串名称、字符串col1、字符串col2)
{
this.Name=Name;
this.Column1=col1;
this.Column2=col2;
this.Children=新列表();
}
}
private void InitializeFristTabValue()
{
如果(_UserDAC==null)
_UserDAC=新的UserDAC();
尝试
{
DataTable dtUserGroup=_UserDAC.GetAllSECGROUPS(appDirectory,this.FindForm().Name,“InitializeFristTabValue()”)。表[0];
CommonDataGridBind cc=新的CommonDataGridBind();
cc.GridviewGrouping(dtUserGroup,kryptonOutlookGridUserGroup,true,“GROUPID”);
DataTable SEC_Info=_UserDAC.GetSECAPPINFO(appDirectory,this.FindForm().Name,“InitializeFristTabValue()”)。表[0];
int位置=0;
foreach(SEC_信息行中的DataRow dtrow)
{
int-APPID;
int.TryParse(dtrow[“APPID”].ToString(),out-APPID);
可折叠面板OBJ=新的可折叠面板();
如果(位置==0)
{
collapsablepanelobj.Collapse=false;
//可折叠面板obj.Dock=System.Windows.Forms.DockStyle.Fill;
this.collappablepanelobj.Size=新系统图纸尺寸(1000150);
//DataTable SEC_InfoTreeView=_UserDAC.GetAPPITEMSbyAPPID(APPID,appDirectory,this.FindForm().Name,“InitializeFristTabValue()”)。表[0];
//ADDNode(APPID);
treeListView1.Dock=System.Windows.Forms.DockStyle.Fill;
//_panelBox.Anchor=主播样式。顶部|主播样式。右侧|主播样式。底部|主播样式。左侧;
//_panelBox.Controls.Add(treeListView1);
//可折叠PanelObj.Controls.Add(\u panelBox);
可折叠面板对象控件添加(treeListView1);
}
其他的
collapsablepanelobj.Collapse=true;
位置=位置+30;
collappablepanelobj.Name=dtrow[“APPNAME”].ToString()+dtrow[“APPID”].ToString();
collapsablepanelobj.HeaderText=“程序:”+dtrow[“APPNAME”].ToString();
可折叠面板对象锚=((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|系统、窗口、窗体、主播样式(左)
|System.Windows.Forms.AnchorStyles.Right);
可折叠面板obj.BackColor=System.Drawing.Color.Transparent;
可折叠面板OBJ.HeaderCornerRadius=5;
collapsablepanelobj.HeaderFont=新的System.Drawing.Font(“Microsoft无衬线”,8.25F,System.Drawing.FontStyle.Bold);
可折叠面板obj.HeaderImage=null;
可折叠面板OBJ.HeaderTextColor=System.Drawing.Color.Black;
可折叠面板对象位置=新系统图纸点(10,位置);
可折叠面板OBJ.RoundedCorners=真;
//this.collapsablepanelobj.Dock=System.Windows.Forms.DockStyle.Fill;
this.collappablepanelobj.Size=新系统图纸尺寸(1000150);
collapsablepanelobj.UseAnimation=true;
初始化数据(APPID);
FillTree();
AddTree();
panel1.Controls.Add(可折叠panelobj);
//GrpBoxUserGroupInfo.Controls.Add(可折叠面板对象);
}
}
捕获(例外情况除外)
{
LogsWrite(例如,appDirectory,this.FindForm().Name,“InitializeFristTabValue()”;
}
}
public void ADDNode()
{
AddTree();
初始化数据();
FillTree();
}
私有void AddTree()
{
treeListView1=新的BrightIdeasSoftware.TreeListView();
treeListView1.Dock=DockStyle.Fill;
this.Controls.Add(treeListView1);
}
private void InitializeData()
{
UserDAC_UserDAC=newuserdac();
DataTable SEC_InfoTreeView=_UserDAC.GetAPPITEMSbyAPPID(2,“,this.FindForm().Name,“InitializeFristTabValue()”)。表[0];
数据=新列表{};
var parent1=新节点(“用户名”、“状态”、“静态标题”);
对于(int i=0;i