假设我们有一棵树用来设置分类,在页面加载时把数据库中的树内容填充到树上,然后希望在点树节点时可以显示节点的信息,如节点名称,编号等等。如果使用服务器端代码可以通过选中节点的获得节点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>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构