Tree控件的异步加载方案的选择建议(C#,ASP.NET 2.0)

翻译|其它|编辑:郝浩|2008-06-24 13:52:54.000|阅读 1459 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

      笔者前言:本文要说的内容仅针对ASP.NET 2.0以上版本适用,内容也非常的简单,本来不应该放在首页的,但发现不知道的开发者非常多,有必要提醒一下。所以请熟悉Treeview的朋友包涵了,呵呵。

  现在Ajax流行,各类Tree的第三方控件支持异步加载的非常多。我们项目组的成员通常到处找些树控件来用,给项目的稳定性带来很多隐患,出了几次问题。

  我建议大家考虑直接使用.net自带的TreeView控件。但这个控件这样才能异步加载呢?
  先看看示例代码:
  其中 SelectAction="Expand" PopulateOnDemand="true" 这两个属性是关键,在后台代码中,大家也可以看到给有子节点的节点,需要设置相关属性

<asp:TreeView ID="TreeView1" runat="server" EnableClientScript="true" OnTreeNodePopulate="PopulateNode" ImageSet="Arrows" ExpandDepth="0">
 <Nodes>
  <asp:TreeNode Text="部门树" Value="部门树" SelectAction="Expand" PopulateOnDemand="true"/>
 </Nodes>
</asp:TreeView>

  后台代码:
  注意PopulateNode ,这个代码中的写法,是因为我连接的是一个每个层级的部门分别放在不同数据库表,如果各个层级的部门数据都在同一个表里,代码将更加简单。

  TopSmart.UtilClass.Data.IDatabase 这个我自己封装数据库的类,大家可以替换使用自己常用的数据库类,然后就可以了

public void PopulateNode(Object sender, TreeNodeEventArgs e)
{
  PopulateMe(e.Node,e.Node.Depth);
}


public void PopulateMe(TreeNode node, int Depth)
{
  TopSmart.UtilClass.Data.IDatabase db = TopSmart.UtilClass.Data.DataAccess.DatabaseCreate("hr");

  DataTable dt;
  if (Depth == 0)
    dt = db.GetDataTableFromSQL("select t.onelevelname as name,t.onelevelno as no from hrt_onelevel_dic t where t.valid = 1");
  else if (Depth == 1)
    dt = db.GetDataTableFromSQL("select t.twolevelname as name,t.twolevelno as no from hrt_twolevel_dic t where t.valid = 1 and t.onelevelno = '" + node.Value + "'");
  else
    dt = db.GetDataTableFromSQL("select t.deptname as name,t.deptno as no from hrt_dept_dic t where t.valid = 1 and t.twolevelno = '" + node.Value + "'");

  if (dt.Rows.Count > 0)
  {
    foreach (DataRow row in dt.Rows)
    {
      TreeNode NewNode = new TreeNode(row["name"].ToString(), row["no"].ToString());
      NewNode.PopulateOnDemand = (Depth == 2) ? false : true;
      NewNode.SelectAction = TreeNodeSelectAction.Expand;
      node.ChildNodes.Add(NewNode);
    }
  }
}

  NewNode.PopulateOnDemand = (Depth == 2) ? false : true; 这句是因为等于2的时候,我的系统没有更低的子部门了。
标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:CSDN

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP