`
coconut_zhang
  • 浏览: 543692 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

TreeView高效绑定数据

阅读更多

前俩个项目都是做政府的门户网,他们的栏目、部门都要以树形展示,一开始数据比较少,直接递归绑定到TreeView上,后来数据越来越多,树越来越慢,到后面打开一次导入数据至少要等待2分钟。客户不满意了,只能对树形绑定数据进行修改,去网上查了下,发现下面的方法速度比较快
第一次只导入所有根栏目,就是数据库ParentId=0的数据。点击父栏目,如果有子栏目,再从数据库查询其子栏目、绑定。
代码如下:


树形控件
<table width="97%" border="0" cellpadding="3" cellspacing="1" bgcolor="a2c4de">
                            <tr>
                                <td height="30" colspan="4" align="center" background="images/bg7.jpg" bgcolor="#FFFFFF"
                                    class="font12B">
                                    栏目管理</td>
                            </tr>
                           
                            <tr>
                                <td valign="top" colspan="4" align="left" bgcolor="#FFFFFF" >
                                    <asp:TreeView ID="treeCatalog" runat="server" Width="100%" Height="100%"
                                      OnTreeNodePopulate="TreeCatalog_TreeNodePopulate" ExpandDepth="1" ImageSet="Arrows" CollapseImageToolTip="折叠 " ExpandImageToolTip="展开 ">
                                    </asp:TreeView>
                                </td>
                            </tr>
                        </table>
cs代码
绑定数据
private void LoadData()
    {
        try
        {
            DataTable table = new DataTable();
            table = getChildNode(0);            //得到所有所有父节点,放到DataTable中,这里默认根节点的父节为0
            BindNode(table, treeCatalog.Nodes);   //绑定所有的父节点
        }
        catch (Exception ex)
        {
            Response.Write("<script>window.top.navigate('Login.aspx');</script>");
        }
    }

    得到父节点的字节点,放到DataTable中#region 得到父节点的字节点,放到DataTable中
    private DataTable getChildNode(int ParentId)
    {
        DataTable table = new DataTable();
        DataService.Service service = new Service();
        DataSet ds = service.CatalogGetByParentId(ParentId).SearchResultDataSet;
        if (ds!=null&&ds.Tables[0].Rows.Count>0)
        {
            table = ds.Tables[0];
        }
        else
        {
            table = null;
        }
        return table;
    }
    #endregion

    填充节点#region 填充节点
    private void BindNode(DataTable table,TreeNodeCollection node)
    {
        DataView dv = new DataView(table);
        TreeNode NewNode;
        foreach(DataRowView dr in dv)
        {
            NewNode = new TreeNode();
            string text = "<a href='CatalogEdit.aspx?Id=" + dr["Id"].ToString() + "'>" + dr["Name"].ToString();
            text +="</a>&nbsp;&nbsp;&nbsp;<a href='CatalogAdd.aspx?ParentId=" + dr["Id"].ToString() + "'>";
            text+="<img alt='增加子栏目' src='images/jia.jpg' border='0'></a>";
            NewNode.Text = text;
            NewNode.Value = dr["Id"].ToString();
            node.Add(NewNode);
            NewNode.PopulateOnDemand = Convert.ToInt32(dr["ChildNodeCount"].ToString())>0;
        }
    }
    #endregion

    填充节点事件#region 填充节点事件
    protected void TreeCatalog_TreeNodePopulate(object sender,TreeNodeEventArgs e)
    {
        getDataNode(Convert.ToInt32(e.Node.Value), e.Node);     //点加号展开时调用.得到数据并绑定.传入点击结点 ID,和点击节点对像.
    }
    #endregion

    private void getDataNode(int ParentId,TreeNode Node)
    {
        BindNode(getChildNode(ParentId), Node.ChildNodes);      //向结点填充数据.
    }

存储过程
存储过程
CREATE PROCEDURE usp_CatalogGetByParentId
(
@ParentId        int
)
AS
BEGIN
    if @ParentId is null
    SELECT Id,Name,ParentId,CategoryId,IsParent,(select count(*) from Catalog where ParentId=C.Id and Status<>99 ) as ChildNodeCount
    FROM Catalog C where status <>99 and ParentId is null order by [order]
    else
    SELECT Id,Name,ParentId,CategoryId,IsParent,(select count(*) from Catalog where ParentId=C.Id and Status<>99 ) as ChildNodeCount
    FROM Catalog C where status <>99 and ParentId=@parentId order by [order]
END

分享到:
评论

相关推荐

    treeview动态数据绑定

    5. **实时更新**:当数据源发生变化时,如添加、删除或修改记录,通过重新绑定数据(如调用`DataBind()`方法)或使用数据绑定的自动更新机制,使TreeView立即反映出这些变化。 6. **扩展功能**:还可以利用TreeView...

    TreeView数据绑定方法

    3. **绑定数据**:将数据源与`TreeNode`关联起来。这可以通过使用`DataSource`属性和`DataMember`属性完成,或者通过编程方式逐个添加`TreeNode`。 4. **更新视图**:一旦数据绑定完成,`TreeView`会自动根据数据源...

    TreeView .net 绑定 绑定方法为公共类

    数据绑定是.NET中的一项核心功能,它使得UI组件(如`TreeView`)可以直接与数据源关联,从而自动更新视图以反映数据源的变化。数据源可以是任何实现了`IEnumerable`或`IListSource`接口的对象,如数组、列表或数据库...

    c# treeview文件绑定的实例

    1. **使用`BindingSource`**:`BindingSource`是一个强大的组件,它提供了一种简单的方式来绑定数据源。首先,创建一个`BindingSource`实例,设置其`DataSource`为你的数据集,然后将`TreeView`的`DataSource`设置为...

    TreeView数据绑定

    总之,TreeView数据绑定是.NET开发中的重要技能,它使数据可视化变得简单且高效。通过掌握这一技术,你可以创建更动态、响应式的用户界面,提高应用程序的交互性和用户体验。在实际项目中,它广泛应用于文件系统浏览...

    wpf /treeview数据库绑定

    `TreeView` 的数据绑定是 WPF 数据绑定机制的一个重要应用,它允许开发者以声明式的方式将视图(如 `TreeView`)与数据源(如数据库)关联起来,从而简化UI与数据之间的同步。 1. **数据绑定基础** 数据绑定是 WPF...

    将数据库中数据绑定到TREEVIEW

    本文将深入探讨如何将数据库中的数据绑定到TREEVIEW控件,这是一个广泛应用于展示具有层次结构数据的控件,如组织结构、文件系统等。下面,我们将详细分析代码示例,解析其工作原理,并提供一些最佳实践。 ### ...

    TreeView控件绑定数据库.docx

    ### TreeView 控件绑定数据库知识点解析 #### 一、TreeView 控件简介 在软件开发过程中,尤其是涉及到数据展示时,`TreeView` 控件被广泛应用于显示具有层级关系的数据,如组织架构、文件目录等。它能够直观地表示...

    TreeView的动态绑定(高效型)_Ajax

    在标题提到的"TreeView的动态绑定(高效型)_Ajax"中,关键在于如何设计一个高效的动态加载策略。这通常包括以下步骤: 1. **客户端事件处理**:在TreeView的节点被展开时,触发一个Ajax请求。这个事件可以是...

    treeview 递归绑定数据库中的数据 支持web winform

    本文将探讨如何使用TreeView控件递归地绑定数据库中的数据,以实现高效、直观的数据展示。TreeView控件是一个常见的用户界面元素,它以树形结构显示数据,非常适合于层级关系的展示,例如组织结构、文件系统或目录...

    .net TreeView 动态绑定数据库 无限级树目录 递归调用

    设置TreeView控件的DataSource属性为你在业务逻辑层创建的TreeNode集合,然后调用DataBind()方法来实际绑定数据。 6. **事件处理**:为了响应用户的交互,如节点展开或点击,可以添加事件处理程序。例如,当用户...

    Silverlight 带连线TreeView,自动数据组装

    通过数据绑定,我们可以将数据模型直接映射到TreeView上,简化界面和逻辑的耦合。 **2. 自动数据组装** 自动数据组装是指在程序运行时,根据数据模型动态地生成TreeView的节点。这通常通过数据绑定和数据模板实现。...

    TreeView绑定和ProgressBar进度条实现实例

    然后,可以通过`TreeView`的`Nodes`属性或者`DataSource`属性进行数据绑定。 ```csharp // 创建树节点数据模型 public class TreeNodeModel { public string Text { get; set; } public List&lt;TreeNodeModel&gt; ...

    WPF TreeView绑定集合生成树

    理解数据绑定的基础,创建合适的数据模型,定义数据模板,配置数据源,以及掌握如何响应用户交互,是构建高效`TreeView`的关键。通过实践和不断学习,开发者可以创建出功能丰富的用户界面,满足复杂的数据展示需求。

    WPF Combox+treeview以及 datagried+treeview控件

    自定义这个控件的关键在于正确地绑定数据源,实现高效的虚拟化以处理百万级别的数据量,同时保持良好的性能。 首先,我们需要实现虚拟化。在`TreeView`中,虚拟化是一种节省内存和CPU资源的技术,它只在可视区域...

    树控件绑定数据源.rar

    文件名没有提供更多的上下文信息,但通常这样的资源会帮助开发者理解如何在实际应用中绑定数据到树形控件,从而更高效地展示和操作层次数据。学习和掌握这一技能对于开发涉及层级结构展示的项目至关重要。

    treeview的datasource类

    2. **数据绑定**:使用`DataSource`属性将数据绑定到`TreeView`,同时设置`DataMember`属性来指定数据中代表节点的字段。例如,如果你的数据源是对象列表,可以这样设置: ```csharp treeView1.DataSource = ...

    C# 绑定TreeView

    本篇文章将深入探讨如何在C#中绑定数据到`TreeView`控件,以及相关的实现细节。 1. 数据源准备 在绑定数据到`TreeView`之前,你需要有一个数据源。这个数据源可以是数组、列表、字典或者任何实现了`IEnumerable`...

    Treeview在winform中的运用(从数据库动态添加节点,增加节点、删除节点、复制节点)

    考虑到更高效的数据管理和更新,可以使用数据绑定将Treeview与数据源(如DataTable或BindingSource)连接起来。这样,当数据库中的数据改变时,Treeview会自动更新,反之亦然。 7. **优化性能** 如果数据库记录...

Global site tag (gtag.js) - Google Analytics