Treeview添加重复节点

时间:2013-07-31 09:36:28

标签: c# asp.net

我有一张深度为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);
        }
    }

请帮助吗?

2 个答案:

答案 0 :(得分:2)

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

更改为:

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

答案 1 :(得分:0)

尝试使用下面的内容

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

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