asp.net dataview做無限極分類的又一用法
更新時間:2009年11月02日 14:07:59 作者:
通??吹絼e人以及自己以前在綁定無限極分類的時候,總是需要多次連接數(shù)據(jù)庫,這樣覺得造成了資源的浪費,然后我想一次把所有數(shù)據(jù)先取出來(類型不是很多的情況),這樣可以節(jié)省服務器的開銷。
數(shù)據(jù)庫結構:
classidid 主鍵
jobClassName 對應的類型名稱
ClassName 對應的父類的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);
}
}
}
很明顯,這種做法是每個父分類都得建立一次連接,完全浪費資源
現(xiàn)在一次取出所有分類,使用DataView的RowFilter屬性做多次過濾
關鍵代碼
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();
}
}
這樣的話,也就沒必要浪費資源的了。
其實這篇文章有些牽強了,一般分類都很少做改動的,直接用緩存或靜態(tài)化處理就可以了,只是想到了記錄一下O(∩_∩)O~。
classidid 主鍵
jobClassName 對應的類型名稱
ClassName 對應的父類的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);
}
}
}
很明顯,這種做法是每個父分類都得建立一次連接,完全浪費資源
現(xiàn)在一次取出所有分類,使用DataView的RowFilter屬性做多次過濾
關鍵代碼
復制代碼 代碼如下:
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();
}
}
這樣的話,也就沒必要浪費資源的了。
其實這篇文章有些牽強了,一般分類都很少做改動的,直接用緩存或靜態(tài)化處理就可以了,只是想到了記錄一下O(∩_∩)O~。
相關文章
使用Entity Framework(4.3.1版本)遇到的問題整理
在這里記錄一下之前使用Entity Framework(4.3.1版本)遇到的問題:更新沒有設置主鍵的表、更改Code-First的默認連接、檢測字符串截斷錯誤,需要的朋友可以參考下2012-12-12ASP.NET Core 3框架揭秘之 異步線程無法使用IServiceProvider問題
這篇文章主要介紹了ASP.NET Core 3框架揭秘之異步線程無法使用IServiceProvider問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12asp.Net 中獲取一周第一天,一月第一天等實現(xiàn)代碼
.Net中獲取一周第一天、最后一天,一月第一天、最后一天2009-12-12詳解ASP.NET Core 之 Identity 入門(一)
本篇文章主要介紹了ASP.NET Core 之 Identity 入門,主要負責對用戶的身份進行認證,有興趣的可以了解一下。2016-12-12asp.net中GridView和DataGrid相同列合并實現(xiàn)代碼
asp.net中GridView和DataGrid相同列合并實現(xiàn)代碼,需要的朋友可以參考下2012-10-10.net采用ajax實現(xiàn)郵箱注冊和地區(qū)選擇實例
這篇文章主要介紹了.net采用ajax實現(xiàn)郵箱注冊和地區(qū)選擇的方法,以實例形式詳細講述了.net采用ajax的技巧,非常實用,需要的朋友可以參考下2014-10-10