ASP.NET生成树形显示的GridView
来源:互联网 发布:淘宝每时每刻沙特代购 编辑:程序博客网 时间:2024/05/21 04:44
目的:生成树形结构的表格数据(EasyUI也有TreeGrid,此处只是提供一个思路),可以扩展单击展开/收缩节点
图例:
类代码:
using System;using System.Data;/// <summary>///GridViewHelper 的摘要说明/// </summary>public class GridViewHelper{ private string gridline; //连接线 private DataTable dt; //传入的DataTable private DataTable dtOut; //输出的DataTable private DataRow row; //用于从DataView取数据并增加到dtOutpublic GridViewHelper(){////TODO: 在此处添加构造函数逻辑//} /// <summary> /// 生成树形结构的DataTable /// </summary> /// <param name="datatable">原始数据表</param> /// <param name="parentField">上级节点关键字段</param> /// <param name="parentValue">上级节点值</param> /// <param name="keyField">本节点关键字段</param> /// <param name="textField">显示的文本字段</param> /// <param name="sortString">排序字符串</param> /// <returns>处理后的DataTable</returns>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;} /// <summary> /// 递归生成新的节点名称(带连接线) /// </summary> /// <param name="parentValueField">上级节点关键字段</param> /// <param name="parentValue">上级节点值</param> /// <param name="keyField">本节点关键字段</param> /// <param name="textField">显示出来的文本字段</param> /// <param name="sortString">排序字符串</param> /// <param name="level">树深度</param> /// <returns></returns> 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(); } /// <summary> /// 回溯生成树的连接线 /// </summary> /// <param name="parentValueField">上级节点关键字段</param> /// <param name="parentValue">上级节点值</param> /// <param name="keyField">本节点关键字段</param> /// <param name="nodeKey">本节点值</param> /// <param name="sortString">排序字符串</param> /// <returns></returns> 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" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title>生成树形显示的GridView</title> <style type="text/css"> body { line-height: 16px; font-size: 14px; } td { padding: 0 2px; } </style></head><body> <form id="form1" runat="server"> <table> <tr> <td valign="top"> <asp:DropDownList ID="DropDownList1" runat="server"> </asp:DropDownList> </td> <td> <asp:GridView ID="GridView1" runat="server" BorderWidth="1px" CellPadding="3" GridLines="Vertical" AutoGenerateColumns="False" BackColor="White" BorderColor="#E7E7FF" BorderStyle="None"> <AlternatingRowStyle BackColor="#F7F7F7" /> <Columns> <asp:BoundField DataField="ConText" HeaderText="文本" /> <asp:BoundField DataField="id" HeaderText="ID"> <ItemStyle HorizontalAlign="Right" Width="80px" /> </asp:BoundField> <asp:BoundField DataField="ParentID" HeaderText="父ID"> <ItemStyle HorizontalAlign="Right" Width="80px" /> </asp:BoundField> <asp:BoundField DataField="level" HeaderText="Level"> <ItemStyle HorizontalAlign="Right" Width="80px" /> </asp:BoundField> </Columns> <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" /> <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" /> <PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" /> <RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" /> <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" /> <SortedAscendingCellStyle BackColor="#F4F4FD" /> <SortedAscendingHeaderStyle BackColor="#5A4C9D" /> <SortedDescendingCellStyle BackColor="#D8D8F0" /> <SortedDescendingHeaderStyle BackColor="#3E3277" /> </asp:GridView> </td> </tr> </table> </form></body></html>
后台代码:
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();
- ASP.NET生成树形显示的GridView
- ASP.NET动态生成GridView的使用
- asp.net中的GridView中显示的时间格式
- asp.net中不显示GridView的表头
- asp.net的GridView字段显示过长问题
- asp.net里GridView的字段,怎么居中显示?
- Asp.net 动态控制GridView列的显示和隐藏
- asp.net gridview 生成excel及word
- asp.net GridView生成二维表头
- asp.net GridView中显示空格
- ASP.NET gridView 显示图片[转载]
- ASP.NET显示渐变图片--GridView
- ASP.NET-GridView分页排序显示
- ASP.NET+Extjs2.0+GridView+Js+显示数据,并且获取GridView相应列的值
- ASP.NET的Gridview标题显示,在数据库的值为1,则显示是等
- 在 ASP.NET 网页中显示动态生成的图片
- Asp.NET GridView使用iTextSharp.NET生成PDF
- 关于asp.net自动生成树形下拉列表(数据库版)
- AngularJS 学习 (一)Start
- 垂直搜索采集系统总结(上)
- jquery实现 购物车 信息 级联改变
- 通用sql分页存储过程
- iphone ipad 设置应用图标
- ASP.NET生成树形显示的GridView
- 纵向二级导航
-
- linux共享库的使用
- 研究表明Mozilla在用户隐私方面是最值得信赖的互联网公司
- Inserting Sort (插入排序)
- 2013年目标
- Avro总结(RPC/序列化)
- java的异常处理