手机版

Asp.net树视图为用户选择和输入建立方法推荐

时间:2021-10-25 来源:互联网 编辑:宝哥软件园 浏览:

一般的单项数据选择可以使用DropdownList控件来实现,但对于具有多个选择性输入和层次关系的内容,最好选择TreeView控件。介绍了如何使用TreeView控件有效获取用户输入,涉及TreeView控件的级联选择、将节点的HTML链接改为扩展目录、获取选定内容、将数据库的信息改为树内容、使用弹出窗口等。本文进入应用层面的例子,希望能做个标记,对人对己都有好处!_ _本文的业务范围是可以输入分类详细的子内容。由于其内容的多样性和一定的层次关系,不适合使用DropdownList和CheckboxList控件。因此,带有CheckBox属性的TreeView控件用于帮助用户输入。输入界面大致如下所示。用户通过选择放置TreeView控件的按钮来触发弹出对话框。

在弹出的对话框中放置了TreeView控件,一个带有CheckBox,方便用户选择,并且有级联(通过Javascript实现,减少Post回发)。另外,因为内容多,我设置了扩展级别。

通过选择或取消选择大类别,用户可以选择或取消选择其列表下的所有项目,或者独立选择子项。

由于通过Javascript获取和组装返回的内容并不容易,本文通过在后台遍历树来处理返回值,然后将返回值绑定在父窗体的Javascript中,使其能够在界面控件中以指定的格式显示内容。

以下为超文本标记语言的代码,其中控件代码已检查为级联爪哇岛描述语言函数,提交值为对返回值进行绑定的操作。代码复制代码代码如下: div class=' search ' span ASP : image button ID=' BTN select ' runat=' server ' ImageUrl=' ~/Themes/Default/BTN _ select。gif ' onclick=' BTN select _ Click '/ASP : image button ID=' BTN close ' runat='服务器' onclient Click=' JavaScript :窗口。close();返回false ' imageurl=' ~/Themes/Default/BTN _ close。gif '/span表格单元格间距='0 '单元格填充='0 '边框='0 '宽度='100%' tr td类='ico' /td td类=' form ' ASP : treeview ID=' treeview 1 ' runat=' server ' onclick=' ontrienodecchecked();show checks=' All ' showline=' True ' expanded PTH=' 1 ' Font-Bold=' False ' fore color=' # 0000 cc '/ASP : treeview/TD/tr/table/div脚本语言=' JAVAScript ' type=' text/JAVAScript ' function ontrienodechecked(){ var ele=event。加速;if(ele。type==' CheckBox '){ var children divided=ele。身份证。替换(‘CheckBox’、‘Nodes’);var div=文档。getelementbyid(孩子分开);if (div==null)返回;var复选框s=div。getelementsbytagname(' INPUT ');for(var I=0;长度;I){ if(CheckBox[I]).type=='checkbox ')复选框[i].checked=ele.checked} } }函数submit VaLue(){ VAr VaL=' ';var returnVal=新数组();var输入=文档。全部。标签(' INPUT ');var n=0;for(var I=0;我输入。长度;i ) //遍历页面上所有的输入{如果(输入[i]).type=='checkbox') { if(输入[i].选中){ var strValue=inputs[i].价值;val=strValue ',';//returnVaL[n]=VaL;n=n ^ 1;} } //if(输入[i].type=' checkbox ')}//for window。返回值=val窗户。close();}/脚本下面代码是页面的后台代码,其中展示了如何对树进行数据绑定,使其能够显示有层次格式的内容,其中添加树节点是一个递归函数选择点击事件处理函数,专门对返回的数据进行组装,以一定的格式显示到客户端的控件输入上。代码复制代码代码如下:受保护的无效页面_加载(对象发送方,EventArgs e) { if(!这个. IsPostBack){ Binddata();} } private void BiNData(){ Arraylist作用域树=bllfactrybusiness scope .实例。getree();foreach(在scopeTree中的business scopendeinfo节点信息){树节点节点=新树节点(节点信息.名称);节点。选择操作=树节点选择操作。扩展;这个TreeView1 .节点。添加(节点);AddTreeNode(node,NodeInfo);} } private void AddTreeNode(TreeNode父节点,business scopendeninfo nodeInfo){ TreeNode TreeNode=null;foreach(NodeInfo中的业务范围定义信息(子网信息).子级){树节点=新树节点(subNodeInfo .名称);树节点.选择操作=树节点选择操作。扩展;父节点.添加(树节点);AddTreeNode(treeNode,subNodeInfo);} }受保护的作废BTN选择_点击(对象发送者,ImageClickEventArgs e){ 0字符串结果=' ';foreach(在本例中为TreeNode父节点TreeView1 .节点){ foreach(父节点中的TreeNode节点子节点){ StringBuilder sb=new StringBuilder();foreach(节点中的树节点子节点.子节点){ if (subNode .检查过了AppendFormat('{0},',subNode .文本);如果(某人)。长度0) {某人.插入(0,字符串。格式(' {0}('),节点。文本));某人(某人的简写)追加(')');结果=某人ToString().替换(',)',')')';} else if(节点。选中){结果=节点。文字;} } }助手CloseWin(这个,结果。修剪(';'));} 其中数的数据组装也是需要注意的一个地方,为了提高效率,避免频繁查找数据库,我们先把符合条件的数据放到数据表,然后通过对象的挑选在内存中查找,这样可以很好的提高递归函数的查找效率。

代码复制代码代码如下: ///summary ///获取数据树////summary////returns/returns public ArrayList GetTree(){ ArrayList arrReturn=new ArrayList();字符串sql=字符串。格式('从{0}订单中选择*按PID,Seq ',表名);数据库数据库=数据库工厂创建数据库();DbCommand cmdWrapper=db .GetSqlStringCommand(SQL);数据集ds=db .执行数据集(cmdWrapper);if (ds .表。计数0) { DataTable dt=ds .表[0];数据行[]数据行=dt .选择(字符串。格式(' PID={0} ',-1));for(int I=0;我数据行。长度;i ) { int id=Convert .ToInt32(数据行[I][' ID ']);业务范围定义信息=GetNode(id,dt);arrReturn .添加(菜单定义信息);} } return arrReturn } private business scopendinfo GetNode(int id,DataTable dt){ business scopeninfo menuInfo=this .FindByID(id);业务范围定义信息=新业务范围定义信息(菜单信息);DataRow[] dChildRows=dt .选择(字符串。格式(' PID={0} ',id));for(int I=0;我有孩子。长度;i ) { int childId=Convert .至t32(dcchildrows[I][' ID ']);business scopenodeinfo childNodeInfo=GetNode(childId,dt);菜单定义信息。儿童。添加(儿童节点信息);}返回菜单定义信息;} 其中所用到的数据实体如下面两个类所示,其中业务范围定义信息是对象BusinessScopeInfo的进一步封装,方便提供树的基本信息,也就是业务范围定义信息是一个包含了子类数据的对象,BusinessScopeInfo仅仅是数据库对象的映射实体。代码复制代码代码如下:///summary///business scopendeninfo的摘要说明////摘要公共类business scopendefinfo : business scopeninfo { private ArrayList m _ Children=new ArrayList();///摘要///子菜单实体类对象集合////汇总公共ArrayList Children { get { return m _ Children;}设置{ m_Children=值;} } public business scopetenodeinfo(){ this。m _ Children=new ArrayList();}公共业务范围定义信息定义信息(业务范围信息范围信息){基础.Id=scopeInfo .id;基地名称=范围信息.名称;基地Seq=scopeInfo .Seq} }代码复制代码代码如下:[可序列化]公共类业务范围信息:基本实体{ #区域字段成员私有十进制m _ Id=0;私有十进制m _ Pid=-1;私有字符串m _ Name=私有字符串m _ Seq=# endregion #区域属性成员公共虚拟十进制Id { get { return this.m _ Id}设置{ this.m_Id=值;} }公共虚拟十进制Pid { get { return this.m _ Pid}设置{ this.m_Pid=值;} }公共虚拟字符串Name { get { return this.m _ Name}设置{ this.m_Name=值;} }公共虚拟字符串Seq { get { return this.m _ Seq}设置{ this.m_Seq=值;} } #endregion }其中的数据格式大致如下(本文的例子是在神谕环境中工作的),其实数据库或者其他数据库也是一样

主要研究技术:代码生成工具,Visio二次开发,请注明出处:作者:吴华聪。

版权声明:Asp.net树视图为用户选择和输入建立方法推荐是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。