我有一棵深度为2的树,如下所示。Treeview添加重复节点
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);
}
}
任何帮助吗?
你的SQL查询返回的行的列表形状'(模块,表单,选项卡)'的形状,所以如果你有3个属于同一个模块和形式的选项卡,那么它们都存在于所有3行中。但是,您仍然可以正确处理模块。只要对表单做同样的事情。 –
DataRow [] drForms = dt.Select(“Module ='”+ TModule.Value +“'”);'带回?这就是你的问题所在。我建议你过滤不同的这些。 – SollyM
@Heuster那是真的,我没有'Modules'的问题,因为它们显示得很好,只有'Forms'有问题。已经尝试过,但是出现了选择不属于该方法中的表的字段的问题。 – mutiemule