我有一张深度为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);
}
}
请帮助吗?
答案 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);
}
}
您也可以创建单独的功能进行检查