树视图添加重复节点

本文关键字:节点 添加 视图 | 更新日期: 2023-09-27 18:25:41

我有一个深度为2的树,如下所示。

Module 1
    Form 1
         Tab 1
    Form 2
         Tab 2
         Tab 3
    Form 2
         Tab 2
         Tab 3
Module 2
    Form 4
         Tab 2
    Form 5
         Tab 4
         Tab 5
         Tab 6
    Form 5
         Tab 4
         Tab 5
         Tab 6
    Form 5
         Tab 4
         Tab 5
         Tab 6

如上所示,问题在于,Forms将被显示与它们所具有的Tabs一样多的次数。例如,如果Form 5具有三个Tabs,则会显示三次。我需要它们只显示一次,因为它们的选项卡是相同的。

这是我的代码:

private void LoadTreeview()
    {
        string sql = "SELECT Module, Form, Tab, HelpText " +
                        "FROM PageHelp " +
                        "WHERE Module IS NOT NULL";
        DataTable dt = Public_Methods.Get_DataTable(sql);
        DataView dvModules = new DataView(dt, "Module IS NOT NULL", "Module ASC", DataViewRowState.Unchanged);
        DataTable dtModules = dvModules.ToTable(true, "Module");
        for (int count = 0; count < dtModules.Rows.Count; count++)
        {
            TreeNode TModule = new TreeNode();
            TModule.Value = dtModules.Rows[count]["Module"].ToString();
            TModule.Text = dtModules.Rows[count]["Module"].ToString();
            TModule.Collapse();
            LoadForms(ref TModule, dt);
            TreeView_EditHelp_Help.Nodes.Add(TModule);                
        }
    }
    private void LoadForms(ref TreeNode TModule, DataTable dt)
    {
        DataRow[] drForms = dt.Select("Module='" + TModule.Value + "'");
        for (int count = 0; count < drForms.Length; count++)
        {
            TreeNode TForm = new TreeNode();
            TForm.Value = drForms[count]["Form"].ToString();
            TForm.Text = drForms[count]["Form"].ToString();
            TForm.Collapse();
            LoadTabs(ref TForm, dt);
            TModule.ChildNodes.Add(TForm);
        }
    }
    private void LoadTabs(ref TreeNode TForm, DataTable dt)
    {
        DataRow[] drTabs = dt.Select("Form='" + TForm.Value + "'");
        for (int count = 0; count < drTabs.Length; count++)
        {
            TreeNode TTab = new TreeNode();
            TTab.Value = drTabs[count]["Tab"].ToString();
            TTab.Text = drTabs[count]["Tab"].ToString();
            TTab.Collapse();
            TForm.ChildNodes.Add(TTab);
        }
    }

有什么帮助吗?

树视图添加重复节点

DataRow[] drForms = dt.Select("Module='" + TModule.Value + "'");

更改为:

DataRow[] drForms = dt.Select("Module='" + TModule.Value + "'").CopyToDataTable().DefaultView.ToTable(true,"Form").Select();

尝试下面的

for (int count = 0; count < dtModules.Rows.Count; count++)
        {
            TreeNode TModule = new TreeNode();
            TModule.Value = dtModules.Rows[count]["Module"].ToString();
            TModule.Text = dtModules.Rows[count]["Module"].ToString();
            TModule.Collapse();
f =0;
             for(int j=0;j<count;j++)
{  // check the new module has been previously ocured or not
 if(dtModules.Rows[count]["Module"].ToString() == dtModules.Rows[j]["Module"].ToString())
  {  
 f=1;
break;
}
}
 if(f== 0){
            LoadForms(ref TModule, dt);
            TreeView_EditHelp_Help.Nodes.Add(TModule);                
}
        }

您也可以创建单独的功能来检查