假設我們有一棵樹用來設定分類,在頁面載入時把資料庫中的樹內容填充到樹上,然後希望在點樹節點時可以顯示節點的資訊,如節點名稱,編號等等。如果使用伺服器端代碼可以通過選中節點的獲得節點ID,然後從資料庫中取出結果。這樣做會導致樹在點擊時閃爍的很厲害,很不爽。如果我們節點的資訊不是很多,比如只有三個節點ID,Name和Description。便可以採用用戶端代碼和伺服器端代碼結合的辦法來實現。代碼如下。
伺服器端
private void Page_Load(object sender, System.EventArgs e)
{
lblmsg.Text="";
if(!IsPostBack)
{
TreeView1.Attributes.Add("onclick","GetAttribute()");//添加可以獲得節點內容的javaScript函數
//此函數在本頁的Html代碼中
BindData();
}
}
private void BindData()
{
using (ORC orc=new ORC())
{
ds=orc.GetSQL("select TypeID,TypeName,Description,ParentID from medtblType","medtblType");
if (orc.ErrMsg!="")
{
lblmsg.Text=orc.ErrMsg;
//Response.Write(orc.ErrMsg);
return;
}
dv=ds.Tables[0].DefaultView;
TreeView1.Nodes.Clear();
comclsbase mybas=new comclsbase();
mybas.BuilderTree(TreeView1.Nodes,"",dv); //調用建樹的方法
}
}
//建樹方法
public void BuilderTree(TreeNodeCollection tnc ,string parentID,DataView dv)
{
if (parentID=="")
{
dv.RowFilter= "ParentID is null";
}
else
{
dv.RowFilter= "ParentID="+"'"+parentID+"'";
}
foreach(DataRowView drv in dv)
{
TreeNode tn=new TreeNode();
tn.Expanded=true;
tn.ID=drv.Row["TypeID"].ToString().Trim();
tn.Text=drv.Row["TypeName"].ToString().Trim();
tn.NodeData=drv.Row["Description"].ToString().Trim();
tnc.Add(tn);
BuilderTree(tn.Nodes,tn.ID,dv);
}
}
用戶端
<script language="javascript">
//獲得TreeView中被點中的節點的資訊
function GetAttribute()
{
document.Form1.txtDescription.value='';
document.Form1.txtTypeID.value=Trim(TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute("ID"));
document.Form1.txtTypeName.value=Trim(TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute("Text"));
document.Form1.txtDescription.value=Trim(TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute("NodeData"));
}
</script>