Python语言技术文档

微信小程序技术文档

php语言技术文档

jsp语言技术文档

asp语言技术文档

C#/.NET语言技术文档

html5/css技术文档

javascript

点击排行

您现在的位置:首页 > 技术文档 > C#/.NET入门教程

ASP.NET生成树形显示的GridView实现思路

来源:中文源码网    浏览:179 次    日期:2024-04-17 17:40:39
【下载文档:  ASP.NET生成树形显示的GridView实现思路.txt 】


ASP.NET生成树形显示的GridView实现思路
目的:生成树形结构的表格数据(EasyUI也有TreeGrid,此处只是提供一个思路),可以扩展单击展开/收缩节点 图例: 类代码: 复制代码 代码如下: using System; using System.Data; /// ///GridViewHelper 的摘要说明 /// public class GridViewHelper { private string gridline; //连接线 private DataTable dt; //传入的DataTable private DataTable dtOut; //输出的DataTable private DataRow row; //用于从DataView取数据并增加到dtOut public GridViewHelper() { // //TODO: 在此处添加构造函数逻辑 // } /// /// 生成树形结构的DataTable /// /// 原始数据表 /// 上级节点关键字段 /// 上级节点值 /// 本节点关键字段 /// 显示的文本字段 /// 排序字符串 /// 处理后的DataTable public DataTable GetGridViewTreeData(DataTable datatable, string parentField, string parentValue, string keyField, string textField, string sortString) { datatable.Columns.Add("level", Type.GetType("System.Int32")); dt = datatable; dtOut = datatable.Clone(); resetTextField(parentField, parentValue, keyField, textField, sortString, 0); return dtOut; } /// /// 递归生成新的节点名称(带连接线) /// /// 上级节点关键字段 /// 上级节点值 /// 本节点关键字段 /// 显示出来的文本字段 /// 排序字符串 /// 树深度 /// private void resetTextField(string parentValueField, string parentValue, string keyField, string textField, string sortString,int level) { DataView dv = new DataView(dt, parentValueField + "='" + parentValue + "'", sortString, DataViewRowState.CurrentRows); int a = dv.Count; if (dv.Count == 0) { return; } for (int i = 0; i < a; i++) { gridline = ""; dv.RowFilter = parentValueField + "='" + parentValue + "'"; dv.Sort = sortString; getTreeLine(parentValueField, dv[i][parentValueField].ToString(), keyField, dv[i][keyField].ToString(), sortString); dv.RowFilter = parentValueField + "='" + parentValue + "'"; dv.Sort = sortString; row = dtOut.NewRow(); for (int c = 0; c < dv[i].Row.ItemArray.Length; c++) { row[c] = dv[i][c]; } dtOut.Rows.Add(row); dtOut.Rows[dtOut.Rows.Count - 1][textField] = gridline + (i == a - 1 ? "┗" : "┣") + dv[i][textField].ToString(); dtOut.Rows[dtOut.Rows.Count - 1]["level"] = level; resetTextField(parentValueField, dv[i][keyField].ToString(), keyField, textField, sortString,level+1); } dv.Dispose(); } /// /// 回溯生成树的连接线 /// /// 上级节点关键字段 /// 上级节点值 /// 本节点关键字段 /// 本节点值 /// 排序字符串 /// private void getTreeLine(string parentValueField, string parentValue, string keyField, string nodeKey, string sortString) { //选择父层节点 DataView dv = new DataView(dt, keyField + "='" + parentValue + "'", sortString, DataViewRowState.CurrentRows); if (dv.Count > 0) { //选择父节点同级节点 dv.RowFilter = parentValueField + "='" + dv[0][parentValueField].ToString() + "'"; dv.Sort = sortString; for (int j = 0; j < dv.Count; j++) { if (dv[j][keyField].ToString() == parentValue) { if (j == dv.Count - 1) { gridline = " " + gridline; } else { gridline = "┃" + gridline; } } } getTreeLine(parentValueField, dv[0][parentValueField].ToString(), keyField, dv[0][keyField].ToString(), sortString); } dv.Dispose(); } } HTML示例代码: 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="GridViewTree.aspx.cs" Inherits="GridViewTree" %> 生成树形显示的GridView
后台代码: 复制代码 代码如下: DataTable dt = gvHelper.GetGridViewTreeData(datatable, "ParentID", "1", "ID", "ConText", "ConText asc"); GridView1.DataSource = dt; GridView1.DataBind(); DropDownList1.Items.Add(""); DropDownList1.AppendDataBoundItems = true; DropDownList1.DataSource = dt; DropDownList1.DataTextField = "ConText"; DropDownList1.DataValueField = "ID"; DropDownList1.DataBind();

相关内容