在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
本文实例讲述了asp.net使用DataGridTree实现下拉树的方法。分享给大家供大家参考。具体实现方法如下: 下拉树实现原理:输出json到客户端,客户端实现动态加载,中间不会和服务端交互。数据量支持上经测试几千还是很快的。本下拉树控件是用c#+js树实现。 2.c# 计算器 计算字符串数学表达式源码 计算数学表达式原理 采用c#实现 很实用 3.asp.net教程 datagridtree表格树控件 继承asp.net的datagrid控件实现的表格树控件 复制代码 代码如下: 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 < i; 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--; } /// <summary> /// sql语句查询,再绑定到droplist里面 /// </summary> 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 { /**//// <summary> /// 返回dictionary里分别对应id,文本,如果没有子节点返回null /// </summary> /// <param name="parentid">父节点id</param> /// <returns></returns> dictionary<string, string> getchildcategory(string parentid); /**//// <summary> /// 代码里写return new interface.common.dropdowntree(this); /// </summary> dropdowntree dropdowntree { get; } } public sealed class dropdowntree { idropdowntree _dropdowntree; public dropdowntree(idropdowntree dropdowntree) { _dropdowntree = dropdowntree; } /**//// <summary> /// 用于树的前缀 /// </summary> /// <param name="islast">是否是同级节点中的最后一个</param> /// <param name="haschild">本节点是否拥有子节点</param> /// <param name="parentstring">父节点前缀符号</param> /// <returns>本节点的前缀</returns> 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 绑定下拉菜单 /**//// <summary> /// 绑定连动级的下拉菜单 /// </summary> /// <param name="ddlgoodstype">传进一个被绑定的dropdownlist</param> /// <param name="removeid">被排除绑定的节点id</param> /// <param name="autodispose">是否自动释放</param> 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<string> parentkeylist = new queue<string>();//存 有子节点的 节点id queue<string> parentsignlist = new queue<string>();//对应节点id的前缀符号 int itemindexof = 0;//父节点所在的位置 while (haschild) { int lastonecount = 1;//用于计算在同级别中是否最后一个 dictionary<string, string> childlist = _dropdowntree.getchildcategory(currentid);// 得到子节点列表 if (childlist != null && childlist.count > 0) { if (!string.isnullorempty(removeid) && childlist.containskey(removeid)) { childlist.remove(removeid); } foreach (keyvaluepair<string, string> 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(); } } } /**//// <summary> /// 绑定连动级的下拉菜单 /// </summary> /// <param name="ddlgoodstype">传进一个被绑定的dropdownlist</param> public void bindtodropdownlist(dropdownlist ddlgoodstype) { bindtodropdownlist(ddlgoodstype, string.empty,null, true); } /**//// <summary> /// 绑定连动级的下拉菜单 /// </summary> /// <param name="ddlgoodstype">传进一个被绑定的dropdownlist</param> /// <param name="removeid">被排除的id</param> public void bindtodropdownlist(dropdownlist ddlgoodstype, string removeid) { bindtodropdownlist(ddlgoodstype, removeid,null, true); } /**//// <summary> /// 绑定连动级的下拉菜单 /// </summary> /// <param name="ddlgoodstype">传进一个被绑定的dropdownlist</param> /// <param name="removeid">被排除的id,若没有,传null</param> /// <param name="parentid">起始父id</param> 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<string, string> getchildcategory(string parentid) { string where = "parentid='" + parentid + "'"; if (string.isnullorempty(parentid)) { where = "parentid is null or parentid='" + guid.empty + "'"; } list<goodscategorybean> _goodscategorylist = selectlist(0, where, string.empty, false); if (_goodscategorylist != null && _goodscategorylist.count > 0) { dictionary<string, string> categorylist = new dictionary<string, string>(); 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程序设计有所帮助。 |
请发表评论