ASP.NET生成樹(shù)形顯示的GridView實(shí)現(xiàn)思路
圖例:

類(lèi)代碼:
using System;
using System.Data;
/// <summary>
///GridViewHelper 的摘要說(shuō)明
/// </summary>
public class GridViewHelper
{
private string gridline; //連接線
private DataTable dt; //傳入的DataTable
private DataTable dtOut; //輸出的DataTable
private DataRow row; //用于從DataView取數(shù)據(jù)并增加到dtOut
public GridViewHelper()
{
//
//TODO: 在此處添加構(gòu)造函數(shù)邏輯
//
}
/// <summary>
/// 生成樹(shù)形結(jié)構(gòu)的DataTable
/// </summary>
/// <param name="datatable">原始數(shù)據(jù)表</param>
/// <param name="parentField">上級(jí)節(jié)點(diǎn)關(guān)鍵字段</param>
/// <param name="parentValue">上級(jí)節(jié)點(diǎn)值</param>
/// <param name="keyField">本節(jié)點(diǎn)關(guān)鍵字段</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>
/// 遞歸生成新的節(jié)點(diǎn)名稱(chēng)(帶連接線)
/// </summary>
/// <param name="parentValueField">上級(jí)節(jié)點(diǎn)關(guān)鍵字段</param>
/// <param name="parentValue">上級(jí)節(jié)點(diǎn)值</param>
/// <param name="keyField">本節(jié)點(diǎn)關(guān)鍵字段</param>
/// <param name="textField">顯示出來(lái)的文本字段</param>
/// <param name="sortString">排序字符串</param>
/// <param name="level">樹(shù)深度</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>
/// 回溯生成樹(shù)的連接線
/// </summary>
/// <param name="parentValueField">上級(jí)節(jié)點(diǎn)關(guān)鍵字段</param>
/// <param name="parentValue">上級(jí)節(jié)點(diǎn)值</param>
/// <param name="keyField">本節(jié)點(diǎn)關(guān)鍵字段</param>
/// <param name="nodeKey">本節(jié)點(diǎn)值</param>
/// <param name="sortString">排序字符串</param>
/// <returns></returns>
private void getTreeLine(string parentValueField, string parentValue, string keyField, string nodeKey, string sortString)
{
//選擇父層節(jié)點(diǎn)
DataView dv = new DataView(dt, keyField + "='" + parentValue + "'", sortString, DataViewRowState.CurrentRows);
if (dv.Count > 0)
{
//選擇父節(jié)點(diǎn)同級(jí)節(jié)點(diǎn)
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>生成樹(shù)形顯示的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>
后臺(tái)代碼:
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();
- Jquery.TreeView結(jié)合ASP.Net和數(shù)據(jù)庫(kù)生成菜單導(dǎo)航條
- 常用的在數(shù)據(jù)庫(kù)中建立無(wú)限級(jí)樹(shù)形菜單的asp.net代碼
- asp.net 獲取指定文件夾下所有子目錄及文件(樹(shù)形)
- asp.net實(shí)現(xiàn)遞歸方法取出菜單并顯示在DropDownList中(分欄形式)
- ASP.NET遞歸法求階乘解決思路
- 遞歸輸出ASP.NET頁(yè)面所有控件的類(lèi)型和ID的代碼
- asp.net實(shí)現(xiàn)DropDownList,TreeView,ListBox的無(wú)限極分類(lèi)目錄樹(shù)
- asp.net TreeView與XML三步生成列表樹(shù)
- Asp.net treeview實(shí)現(xiàn)無(wú)限級(jí)樹(shù)實(shí)現(xiàn)代碼
- asp.net TreeView遞歸循環(huán)子節(jié)點(diǎn)生成樹(shù)形菜單實(shí)例
相關(guān)文章
某個(gè)aspx頁(yè)面突然死了連日志也沒(méi)有的解決方法
某個(gè)aspx頁(yè)面突然死了連日志也沒(méi)有,朋友提醒event viewer里看看,果然錯(cuò)誤在那里,有此情況的朋友可以參考下2013-08-08
ASP.NET 2.0 中收集的小功能點(diǎn)(轉(zhuǎn))
ASP.NET 2.0 中收集的小功能點(diǎn)(轉(zhuǎn))...2006-12-12
SQL Server LocalDB 在 ASP.NET中的應(yīng)用介紹
如同交響樂(lè)一樣,構(gòu)造軟件系統(tǒng)不一定必須某個(gè)強(qiáng)大的明星驅(qū)動(dòng),我們站在歷代ADO.NET的肩膀上,更好地回歸到SQL Server的核心開(kāi)發(fā):SQL Server LocalDB 在 ASP.NET中的應(yīng)用2013-01-01
.NET?實(shí)現(xiàn)啟動(dòng)時(shí)重定向程序運(yùn)行路徑及?Windows?服務(wù)運(yùn)行模式部署的方法
這篇文章主要介紹了.NET?實(shí)現(xiàn)啟動(dòng)時(shí)重定向程序運(yùn)行路徑及?Windows?服務(wù)運(yùn)行模式部署,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09
MVC+EasyUI+三層新聞網(wǎng)站建立 詳情頁(yè)面制作方法(八)
這篇文章主要為大家詳細(xì)介紹了MVC+EasyUI+三層新聞網(wǎng)站建立的第八篇,教大家如何制作詳情頁(yè)面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
AjaxControlToolKit 顯示瀏覽者本地語(yǔ)言的方法
使用最新版的AjaxControlToolKit控件2008-12-12
ASP.NET MVC分頁(yè)和排序功能實(shí)現(xiàn)
這篇文章主要介紹了MVC學(xué)習(xí)系列之分頁(yè)和排序功能實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07
ASP.NET?MVC使用Identity增刪改查用戶(hù)
這篇文章介紹了ASP.NET?MVC使用Identity增刪改查用戶(hù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10
關(guān)于中g(shù)ridview 字符串截取的方法
在Gridview中,如果你的某一列字符串的長(zhǎng)度過(guò)長(zhǎng),不做處理的話(huà).那么將顯示的奇丑無(wú)比,可以采取設(shè)置樣式,將其顯示為定長(zhǎng),可以在點(diǎn)擊查看的時(shí)候,在另一個(gè)頁(yè)面對(duì)其進(jìn)行顯示2013-06-06

