热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

asp.net使用DataGridTree实现下拉树的方法

这篇文章主要介绍了asp.net使用DataGridTree实现下拉树的方法,详细的讲述了DataGridTree实现下拉树的原理与具体实现方法,具有一定的参考借鉴价值,需要的朋友可以参考下

本文实例讲述了asp.net使用DataGridTree实现下拉树的方法。分享给大家供大家参考。具体实现方法如下:

下拉树实现原理:输出json到客户端,客户端实现动态加载,中间不会和服务端交互。数据量支持上经测试几千还是很快的。本下拉树控件是用c#+js树实现。

2.c# 计算器 计算字符串数学表达式源码

计算数学表达式原理 采用c#实现 很实用
//a.建立两个栈:第一个位操作数栈,第二个操作符符栈!(将栈定义为string类型)
//b.对数字来说是无条件压入数字栈中.
//c.而对符号来说,只有当前栈顶元素的优先值小于扫到的符号时(比如”+”小于”*”),此符号才压入栈;否则大于等于的情况是将当前栈顶元素弹出栈,与当前数字栈的前两个数字组成式子进行计算.计算结果当作数字压入数字栈作为栈顶元素(要舍弃已经弹出的两个数字),而那个扫描到的符号则将代替那个弹出的符号作为栈顶元素)。
//d.最后说一下括号,原则是扫描到左括号时无条件压入符号栈,而扫到右括号时,则弹出离栈顶最近的一个左括号以上的全部符号与数字栈的数字做运算

3.asp.net教程 datagridtree表格树控件 

继承asp.net的datagrid控件实现的表格树控件
/*表格树控件说明
* 此控件继承datagrid 新增属性说明:
* 1.treeparentcode:顶级根节点parentcode
* 2.treedisplaydeep:展现表格树深度默认为1
* 3.sumcolumns:自动汇总到根节点的字段集合 针对 decimal类型
* 4.新增树状列模板templatetreecolumn 此模板继承了templatecolumn 重写了方法initializecell
* 客户端新增特性配置说明
* 1.固定列 配置 itemstyle-css教程class='tdlockedclass'
* 2.固定表头 配置 headerstyle-cssclass='trlockedclass'
* 3.文本框 input 或 * 不过可以自定义js
* 报表说明:
* 1.datagridtree.enableviewstate=false;提高加载速度
* 2.动态定义列 实现 boundcolumn column = new boundcolumn();
column.headertext = "动态列";
column.datafield = "unitname";
datagridnew.columns.add(column);
* 也可以自定义默认模板 动态加载模板 定义模板例子templatetreecolumn,不用继承templatecolumn,实现接口 itemplate initializecell 方法就可以了
* 不足之处:1.对于复杂多行表头 不知 如何实现
* 2.表头和列固定 数据量大时 会影响反映速度 一千左右的数据量 还时没问题的 数据量在大的话 课考虑采用ajax动态加载 目前此功能还没实现
实例代码

代码如下:
private void maketree(datatable dtnodesets, string strparentcolumn, string strrootvalue, string strindexcolumn, string strtextcolumn, dropdownlist drpbind, int i)
{
//每向下一层,多一个缩入单位  
i++;
dataview dvnodesets = new dataview(dtnodesets);
dvnodesets.rowfilter = strparentcolumn + "=" + strrootvalue;
string strpading = ""; //缩入字符 
//通过i来控制缩入字符的长度,我这里设定的是一个全角的空格  
for (int j = 0; j strpading += " ";//如果要增加缩入的长度,改成两个全角的空格就可以了 
foreach (datarowview drv in dvnodesets)
{
treenode tnnode = new treenode();
listitem li = new listitem(strpading + "├" + drv[strtextcolumn].tostring(), drv[strindexcolumn].tostring());
drpbind.items.add(li);
maketree(dtnodesets, strparentcolumn, drv[strindexcolumn].tostring(), strindexcolumn, strtextcolumn, drpbind, i);
}
//递归结束,要回到上一层,所以缩入量减少一个单位  
i--;
}
///   
/// sql语句查询,再绑定到droplist里面  
///
  
private void createtree()
{
//查询zonelist  
string sql = "select * from master_department where parent_department='003'";
dataset ds = db.getds();
datatable dt = ds.tables[0];
maketree(dt, "parent_department", "003", "department_code", "department_name", dropdownlist1, -1);
}

网上找的另一个比较好的实例
代码如下:
using system;
using system.collections.generic;
using system.text;
using system.web.ui.webcontrols;
namespace interface.common
{
    public interface idropdowntree : idisposable
    {
        /**////
        /// 返回dictionary里分别对应id,文本,如果没有子节点返回null
        ///

        /// 父节点id
        ///
        dictionary getchildcategory(string parentid);
        /**////
        /// 代码里写return new interface.common.dropdowntree(this);
        ///

        dropdowntree dropdowntree
        {
            get;
        }
    }
    public sealed class dropdowntree
    {
        idropdowntree _dropdowntree;
        public dropdowntree(idropdowntree dropdowntree)
        {
            _dropdowntree = dropdowntree;
        }
        /**////
        /// 用于树的前缀
        ///

        /// 是否是同级节点中的最后一个
        /// 本节点是否拥有子节点
        /// 父节点前缀符号
        /// 本节点的前缀
        private string getprefix(bool islast, bool haschild, string parentstring)
        {
            string result = string.empty;
            if (!string.isnullorempty(parentstring))
            {
                parentstring = parentstring.remove(parentstring.length - 1).replace("├", "│").replace("└", " ");
                result += parentstring;
            }
            if (islast)
            {
                result += "└";
            }
            else
            {
                result += "├";
            }
            if (haschild)
            {
                result += "┬";
            }
            else
            {
                result += "─";
            }
            return result;
        }
        绑定下拉菜单#region 绑定下拉菜单
        /**////
        /// 绑定连动级的下拉菜单
        ///

        /// 传进一个被绑定的dropdownlist
        /// 被排除绑定的节点id
        /// 是否自动释放
        public void bindtodropdownlist(dropdownlist ddlgoodstype, string removeid,string parentid, bool autodispose)
        {
            if (ddlgoodstype != null)
            {
                listitem listitem = null;
                string currentid = parentid;//根节点/父id
                string currentsign = string.empty;//当前节点符号;
                string parrentsign = string.empty; //父节点符号;
                bool haschild = true;//是否有子
                queue parentkeylist = new queue();//存 有子节点的 节点id
                queue parentsignlist = new queue();//对应节点id的前缀符号
                int itemindexof = 0;//父节点所在的位置 
                while (haschild)
                {
                    int lastOnecount= 1;//用于计算在同级别中是否最后一个
                    dictionary childlist = _dropdowntree.getchildcategory(currentid);// 得到子节点列表
                    if (childlist != null && childlist.count > 0)
                    {
                        if (!string.isnullorempty(removeid) && childlist.containskey(removeid))
                        {
                            childlist.remove(removeid);
                        }
                        foreach (keyvaluepair entry in childlist)
                        {
                            if (_dropdowntree.getchildcategory(entry.key) != null)//存在子
                            {
                                currentsign = getprefix(lastOnecount== childlist.count, true, parrentsign);
                                listitem = new listitem(currentsign + entry.value, entry.key);
                                parentkeylist.enqueue(entry.key);//当前的节点id
                                parentsignlist.enqueue(currentsign);//当前的节点符号
                            }
                            else//不存在子
                            {
                                currentsign = getprefix(lastOnecount== childlist.count, false, parrentsign);
                                listitem = new listitem(currentsign + entry.value, entry.key);
                            }
                            if (ddlgoodstype.items.count != 0)
                            {
                                itemindexof = string.isnullorempty(currentid) ? itemindexof + 1 : ddlgoodstype.items.indexof(ddlgoodstype.items.findbyvalue(currentid)) + lastonecount;
                            }
                            ddlgoodstype.items.insert(itemindexof, listitem);//添加子节点
                            lastonecount++;
                        }
                        if (parentkeylist.count > 0)//存在子节点时
                        {
                            currentid = parentkeylist.dequeue();
                            parrentsign = parentsignlist.dequeue();
                        }
                        else
                        {
                            haschild = false;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                if (autodispose)
                {
                    _dropdowntree.dispose();
                }
            }
        }
        /**////
        /// 绑定连动级的下拉菜单
        ///

        /// 传进一个被绑定的dropdownlist
        public void bindtodropdownlist(dropdownlist ddlgoodstype)
        {
            bindtodropdownlist(ddlgoodstype, string.empty,null, true);
        }
        /**////
        /// 绑定连动级的下拉菜单
        ///

        /// 传进一个被绑定的dropdownlist
        /// 被排除的id
        public void bindtodropdownlist(dropdownlist ddlgoodstype, string removeid)
        {
            bindtodropdownlist(ddlgoodstype, removeid,null, true);
        }
        /**////
        /// 绑定连动级的下拉菜单
        ///

        /// 传进一个被绑定的dropdownlist
        /// 被排除的id,若没有,传null
        /// 起始父id
        public void bindtodropdownlist(dropdownlist ddlgoodstype, string removeid,string parentid)
        {
            bindtodropdownlist(ddlgoodstype, removeid,parentid, true);
        }
        #endregion
    }
}

调用方法很简单:
1.继承自idropdowntree接口
2.实现3个接口方法实现接口代码示例[dispose方法自己实现],最主要的是自己实现获得子级的方法
代码如下:
idropdowntree 成员
#region idropdowntree 成员
public dictionary getchildcategory(string parentid)
{
    string where = "parentid='" + parentid + "'";
    if (string.isnullorempty(parentid))
    {
 where = "parentid is null or parentid='" + guid.empty + "'";
    }
    list _goodscategorylist = selectlist(0, where, string.empty, false);
    if (_goodscategorylist != null && _goodscategorylist.count > 0)
    {
 dictionary categorylist = new dictionary();
 for (int i = 0; i <_goodscategorylist.count; i++)
 {
     categorylist.add(_goodscategorylist[i].id.tostring(), _goodscategorylist[i].gategoryname);
 }
 return categorylist;
    }//51aspx.com
    return null;
}
public interface.common.dropdowntree dropdowntree
{
    get { return new interface.common.dropdowntree(this); }
}
#endregion

页面调用代码: 类名.dropdowntree.bindtodropdownlist(下拉控件id);

希望本文所述对大家的asp.net程序设计有所帮助。


推荐阅读
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 在Android中解析Gson解析json数据是很方便快捷的,可以直接将json数据解析成java对象或者集合。使用Gson解析json成对象时,默认将json里对应字段的值解析到java对象里对应字段的属性里面。然而,当我们自己定义的java对象里的属性名与json里的字段名不一样时,我们可以使用@SerializedName注解来将对象里的属性跟json里字段对应值匹配起来。本文介绍了使用@SerializedName注解解析json数据的方法,并给出了具体的使用示例。 ... [详细]
  • 本文是关于C#类型系统、值类型和引用类型的概念性笔记。介绍了C#1系统类型的三个特性,静态类型的含义,显式类型和隐式类型的区别。还讨论了类、结构、数组类型、枚举、委托类型和接口类型属于哪一种类型。同时纠正了关于结构、引用类型和对象传递的错误表述。最后提到了C#4中使用动态类型的关键字。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • 在C#中,使用关键字abstract来定义抽象类和抽象方法。抽象类是一种不能被实例化的类,它只提供部分实现,但可以被其他类继承并创建实例。抽象类可以用于类、方法、属性、索引器和事件。在一个类声明中使用abstract表示该类倾向于作为其他类的基类成员被标识为抽象,或者被包含在一个抽象类中,必须由其派生类实现。本文介绍了C#中抽象类和抽象方法的基础知识,并提供了一个示例代码。 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 前言:关于跨域CORS1.没有跨域时,ajax默认是带cookie的2.跨域时,两种解决方案:1)服务器端在filter中配置详情:http:blog.csdn.netwzl002 ... [详细]
  • 关于extjs开发实战pdf的信息
    本文目录一览:1、extjs实用开发指南2、本 ... [详细]
  • asp.net(vb脚本)如何获取xml的节点值?xmlversion1.0encodingutf-8?rootimageimagemenusmenuurl#frame_paren ... [详细]
  • 最近学习了关于使用最为流行的jquery发送请求,在实践中以最为简单的聊天室作为测验的辅助工具,对相关网页开发有一个初步的认识,希望大家能够一起学习进步。首先介绍一下 ... [详细]
author-avatar
小白_king
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有