文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>异步加载treeview 不需要ajax,适用于.NET 2.0后所有版本

异步加载treeview 不需要ajax,适用于.NET 2.0后所有版本

时间:2011-01-23  来源:massinger

  最近做个小系统,但数据量的大量加载使得页面加载失败是经常的事情,真的是件痛苦的事情。

  找了很多控件和方法,一开始的思路是ajax,看起来也很美好,但遇到了不少问题。

  首先用了flytreeview/radtreeview两个控件,也支持Ajax异步加载,但flytreeview不支持text/value绑定,比较痛苦,radtreeview貌似还不错,但绑定xmldatasource很痛苦,xpath也不是很友好(可能是我不太熟悉)。

  最后找了半天,发现还是原生的treeview就可以搞定,这里需要的是动态后台绑定,并使用TreeNodePopulate事件和 

node.PopulateOnDemand = true; node.SelectAction = TreeNodeSelectAction.Expand;这两个属性。

  前台直接上treeview控件,后台开始绑定,以下为示例:

 

protected void Page_Load(object sender, EventArgs e)
        {
            if (this.Session.IsNewSession)
            {
                Response.Redirect("~/access.aspx");
            }
            if (!IsPostBack)
            {
                int user_id = (int)Session["user_id"];
                catalog_info myCatalog = new catalog_info();
                string str = "select * from catalog_info  catalog_info INNER JOIN  permission_catalog_info ON catalog_info.catalog_id = permission_catalog_info.catalog_id   WHERE     (permission_catalog_info.user_id ='" + user_id + "') and catalog_father_id='0' order by catalog_name desc";
                DataSet myset = DbHelperSQL.Query(str);
                if (myset.Tables[0].Rows.Count > 0)
                {
                    DataTable nodeTable = myset.Tables[0];
                    for (int i = 0; i < nodeTable.Rows.Count; i++)
                    {
                        TreeNode node = new TreeNode();
                        string nodetext = nodeTable.Rows[i][0].ToString();
                        node.Text = nodetext;
                        node.Value = nodeTable.Rows[i][3].ToString();
                       
             if (myCatalog.Exists(node.Value))
                        {
                            node.PopulateOnDemand = true;
                            node.SelectAction = TreeNodeSelectAction.Expand;
                        }
                        TreeView1.Nodes.Add(node);
                    }
                }
            }
        } 

上面是treeview的顶层数据初始化,并动态设定相关节点的属性,

 if (myCatalog.Exists(node.Value))

为需要展开的节点,即需要异步加载的节点,里面这两个属性必须设置,否则异步加载可能会失败。

 

异步加载事件:TreeNodePopulate

 

 protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
        {
            string nodeSelect = "select * from catalog_info where catalog_father_id='" + e.Node.Value + "' order by catalog_name desc";
            DataSet myset = DbHelperSQL.Query(nodeSelect);
            if (myset.Tables[0].Rows.Count > 0)
            {
                DataTable nodeTable = myset.Tables[0];
                for (int i = 0; i < nodeTable.Rows.Count; i++)
                {
                    TreeNode node = new TreeNode();
                    string nodetext = nodeTable.Rows[i][0].ToString();
                    node.Text = nodetext;
                   
                    node.Value = nodeTable.Rows[i][3].ToString();
                    if (myCatalog.Exists(node.Value))
                    {
                        node.SelectAction = TreeNodeSelectAction.Expand;
                        node.PopulateOnDemand = true;
                    }
                    e.Node.ChildNodes.Add(node);
                }
            }
        }

treeview内部自动实现了异步加载,无需ajax的使用,是不是很方便呢,当然效果可能没ajax的显示动态效果好。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载