XML建立TreeView(二層樹狀)

  • 4462
  • 0

摘要:XML建立TreeView(二層樹狀)

這功能是工作上需要,

而以前的做法是將SQL中的資料轉成TreeView,

只要資料的樹狀編碼的好,轉成TreeView很簡單,

但若資料不多呢?

在這考量下,改用XML,

而拜完google大神後,下列是第一次嘗試若有錯誤還請多多指教。

Step1:建立XML檔如下:

<?xml version="1.0" encoding="utf-8"?>
<Reports>
  <Folder Name="教務部份" >
     <Report File="TEMP01.frx"/>
     <Report File="TEMP02.frx" Dialog="01"/>
     <Report File="TEMP03.frx" Dialog="01"/>
  </Folder>
  <Folder Name="統計部份" WebDemo="false">
    <Report File="TEMP04.frx"/>
     <Report File="TEMP05.frx" Dialog="01"/>
  </Folder>
  <Folder Name="經費部份" WebDemo="false">  
  </Folder>
  <Folder Name="學員部份">   
  </Folder>
</Reports>

Step2:

private void BuildTree()
{
XmlDocument reports = new XmlDocument();
reports.Load(Folder + "reports.xml");
//在Folder 資料夾中,讀出XML所有內容
for (int i = 0; i < reports.Root.Count; i++)//找出根目錄節點
{
XmlItem folderItem = reports.Root[i];
tring culture = System.Globalization.CultureInfo.CurrentCulture.Name;//取得目前的語系-"zh-TW"
string text = folderItem.GetProp("Name-" + culture);//取得Name的名稱
if (String.IsNullOrEmpty(text))
text = folderItem.GetProp("Name");
TreeNode folderNode = tvReports.Nodes.Add(text + " ");//加入樹狀圖
folderNode.ImageIndex = 66;
folderNode.SelectedImageIndex = folderNode.ImageIndex;
folderNode.NodeFont = new Font(Font, FontStyle.Bold);

for (int j = 0; j < folderItem.Count; j++)///找出reports.xml根目錄下的節點
{
XmlItem reportItem = folderItem[j];
string file = reportItem.GetProp("File");//取得File的名稱
string fileName = reportItem.GetProp("Name-" + culture);//取得Name的名稱
if (String.IsNullOrEmpty(fileName))//確認fileName是否為空,為空就將fileName替換file
fileName = Path.GetFileNameWithoutExtension(file);

TreeNode fileNode = folderNode.Nodes.Add(fileName);
fileNode.ImageIndex = 134;
fileNode.SelectedImageIndex = fileNode.ImageIndex;
fileNode.Tag = FReportsFolder + file;//指定節點Tag的資料
}
}

if (tvReports.Nodes.Count > 0 && tvReports.Nodes[0].Nodes.Count > 0)//指定樹狀圖
tvReports.SelectedNode = tvReports.Nodes[0].Nodes[0];
tvReports.Focus();//直接針對第一個節點展開

}

 結果:

 

自我LV~