asp.net dataview做無(wú)限極分類(lèi)的又一用法
更新時(shí)間:2009年11月02日 14:07:59 作者:
通??吹絼e人以及自己以前在綁定無(wú)限極分類(lèi)的時(shí)候,總是需要多次連接數(shù)據(jù)庫(kù),這樣覺(jué)得造成了資源的浪費(fèi),然后我想一次把所有數(shù)據(jù)先取出來(lái)(類(lèi)型不是很多的情況),這樣可以節(jié)省服務(wù)器的開(kāi)銷(xiāo)。
數(shù)據(jù)庫(kù)結(jié)構(gòu):
classidid 主鍵
jobClassName 對(duì)應(yīng)的類(lèi)型名稱(chēng)
ClassName 對(duì)應(yīng)的父類(lèi)的id
通常做法:
private void Display(string parentid, String space)
{
DataTable dt;
String strSQL;
strSQL = "Select * From Tree Where ParentID =" + parentid + " Order By ClassID DESC";
SqlDataAdapter sda = new SqlDataAdapter(strSQL, conn);
DataSet ds = new DataSet();
sda.Fill(ds, "Tree");
dt = ds.Tables["Tree"];
if (dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
strOpinion += space + "<font color=red>[" + dr["JobClassName"].ToString() +"<br>";
Display(dr["ClassID"].ToString(), " " + space,false);
}
}
}
很明顯,這種做法是每個(gè)父分類(lèi)都得建立一次連接,完全浪費(fèi)資源
現(xiàn)在一次取出所有分類(lèi),使用DataView的RowFilter屬性做多次過(guò)濾
關(guān)鍵代碼
public partial class tree_Default : System.Web.UI.Page
{
DataTable dt = null;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bind(0);
}
}
public void bind(int pid)
{
DataTable dt1 = bindTree(pid);
foreach (DataRow dr in dt1.Rows)
{
int id = Convert.ToInt32(dr["classid"].ToString());
if (pid == 0)
Response.Write("<div style='width:100%;float:right;'><h3>" + dr["jobclassname"].ToString() + "</h3></div>");
else
Response.Write("<div style='width:25%;float:left;'>"+dr["jobclassname"].ToString()+"</div>");
bind(id);
}
}
public DataTable bindTree(int pid)
{
if (dt == null)
dt = new data().getCatelogs();
DataView root = dt.DefaultView;
root.RowFilter = "Parentid=" + pid;
return root.ToTable();
}
}
這樣的話(huà),也就沒(méi)必要浪費(fèi)資源的了。
其實(shí)這篇文章有些牽強(qiáng)了,一般分類(lèi)都很少做改動(dòng)的,直接用緩存或靜態(tài)化處理就可以了,只是想到了記錄一下O(∩_∩)O~。
classidid 主鍵
jobClassName 對(duì)應(yīng)的類(lèi)型名稱(chēng)
ClassName 對(duì)應(yīng)的父類(lèi)的id
通常做法:
復(fù)制代碼 代碼如下:
private void Display(string parentid, String space)
{
DataTable dt;
String strSQL;
strSQL = "Select * From Tree Where ParentID =" + parentid + " Order By ClassID DESC";
SqlDataAdapter sda = new SqlDataAdapter(strSQL, conn);
DataSet ds = new DataSet();
sda.Fill(ds, "Tree");
dt = ds.Tables["Tree"];
if (dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
strOpinion += space + "<font color=red>[" + dr["JobClassName"].ToString() +"<br>";
Display(dr["ClassID"].ToString(), " " + space,false);
}
}
}
很明顯,這種做法是每個(gè)父分類(lèi)都得建立一次連接,完全浪費(fèi)資源
現(xiàn)在一次取出所有分類(lèi),使用DataView的RowFilter屬性做多次過(guò)濾
關(guān)鍵代碼
復(fù)制代碼 代碼如下:
public partial class tree_Default : System.Web.UI.Page
{
DataTable dt = null;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bind(0);
}
}
public void bind(int pid)
{
DataTable dt1 = bindTree(pid);
foreach (DataRow dr in dt1.Rows)
{
int id = Convert.ToInt32(dr["classid"].ToString());
if (pid == 0)
Response.Write("<div style='width:100%;float:right;'><h3>" + dr["jobclassname"].ToString() + "</h3></div>");
else
Response.Write("<div style='width:25%;float:left;'>"+dr["jobclassname"].ToString()+"</div>");
bind(id);
}
}
public DataTable bindTree(int pid)
{
if (dt == null)
dt = new data().getCatelogs();
DataView root = dt.DefaultView;
root.RowFilter = "Parentid=" + pid;
return root.ToTable();
}
}
這樣的話(huà),也就沒(méi)必要浪費(fèi)資源的了。
其實(shí)這篇文章有些牽強(qiáng)了,一般分類(lèi)都很少做改動(dòng)的,直接用緩存或靜態(tài)化處理就可以了,只是想到了記錄一下O(∩_∩)O~。
相關(guān)文章
如何在網(wǎng)站級(jí)別動(dòng)態(tài)更改主題
如何在網(wǎng)站級(jí)別動(dòng)態(tài)更改主題...2007-04-04
獲取客戶(hù)端IP地址c#/vb.net各自實(shí)現(xiàn)代碼
項(xiàng)目要求獲取客戶(hù)端的IP地址,分析并且用c#與vb各自實(shí)現(xiàn)了此要求,有需要的朋友可以了解下啊,希望本文對(duì)你們有所幫助2013-01-01
詳解ASP.NET Core 之 Identity 入門(mén)(三)
本篇文章主要介紹了ASP.NET Core 之 Identity 入門(mén),主要負(fù)責(zé)對(duì)用戶(hù)的身份進(jìn)行認(rèn)證,有興趣的可以了解一下。2016-12-12
Asp.Net Core實(shí)現(xiàn)Excel導(dǎo)出功能的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于Asp.Net Core實(shí)現(xiàn)Excel導(dǎo)出功能的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
.NET6使用ImageSharp實(shí)現(xiàn)給圖片添加水印
這篇文章主要為大家詳細(xì)介紹了.NET6使用ImageSharp實(shí)現(xiàn)給圖片添加水印功能的相關(guān)資料,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-12-12
.NET Core對(duì)象池的應(yīng)用:設(shè)計(jì)篇
本文主要講解對(duì)象池的三個(gè)核心對(duì)象:表示對(duì)象池的ObjectPool<T>對(duì)象、對(duì)象值提供者的ObjectPoolProvider對(duì)象,已及控制池化對(duì)象創(chuàng)建與釋放行為的IPooledObjectPolicy<T>對(duì)象。感興趣的小伙伴可以參考一下這篇文章2021-09-09
ASP.NET延遲調(diào)用或多次調(diào)用第三方Web?API服務(wù)
這篇文章介紹了ASP.NET延遲調(diào)用或多次調(diào)用第三方Web?API服務(wù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10
asp.Net JS取母板頁(yè)控件值的簡(jiǎn)單方法
這篇文章介紹了asp.Net JS取母板頁(yè)控件值的簡(jiǎn)單方法,有需要的朋友可以參考一下2013-07-07

