我有一棵深度爲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