Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Treeview添加重复节点_C#_Asp.net - Fatal编程技术网

C# Treeview添加重复节点

C# Treeview添加重复节点,c#,asp.net,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

我有一棵深度为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
如上所示,问题在于,
表单
的显示次数与
选项卡
的显示次数相同。例如,如果
表格5
三个
选项卡
,则它将显示三次。 我需要它们只显示一次,因为它们的选项卡是相同的

这是我的代码:

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);
        }
    }
private void LoadTreeview()
{
string sql=“选择模块、表单、选项卡、帮助文本”+
“来自页面帮助”+
“其中模块不为空”;
DataTable dt=公共方法。获取数据表(sql);
DataView dvModules=新数据视图(dt,“模块不为空”、“模块ASC”、DataViewRowState.Unchanged);
数据表dtModules=dvModules.ToTable(真,“模块”);
对于(int count=0;count
需要帮忙吗

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);                
}
        }
for(int count=0;count对于(int j=0;jSQL查询返回一个shape
(module,form,tab)
(模块,表单,tab)的行列表,因此如果有3个选项卡属于同一个模块和表单,那么它们都存在于所有3行中。但是,您仍然可以正确地处理模块。只需对表单执行相同的操作。
DataRow[]drForms=dt.选择(“module=”)+t模块值+“'”)
带回来?这就是你的问题所在。我建议你对这些进行不同的筛选。@Heuster没错,我对
模块没有问题,因为它们显示得很好,只有
表单有问题。你试过了,但是在方法中选择一个不属于表的字段时出现了问题。@SollyM它返回
模块的第一个
表单
method.Works like magic。你早就应该加入stackoverflow了。花了5个小时调试这个。非常感谢。我还没有尝试过这个方法,但是上面的答案用一行代码就解决了我的问题。你的代码中的问题是,它在同一个模块中多次出现时都在获取记录,我刚刚检查了是否已被删除显然发生了,不要去做