asp.Netdataview無限極分類のもう一つの使い方
2171 ワード
データベース構造:
classididプライマリ・キー
jobClassName対応タイプ名
ClassName対応の親のid
一般的なアプローチ:
明らかに、この方法は親分類ごとに接続を確立し、リソースを完全に浪費しなければならない.
すべてのカテゴリを一度に取り出し、DataViewのRowFilterプロパティを使用して複数回フィルタリングします.
キーコード
これでは、資源を無駄にする必要はありません.
実はこの文章は少し強引で、普通の分類はすべてめったに変えないで、直接キャッシュあるいは静態化の処理でいいので、ただ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 + "[" + dr["JobClassName"].ToString() +"
";
Display(dr["ClassID"].ToString(), " " + space,false);
}
}
}
明らかに、この方法は親分類ごとに接続を確立し、リソースを完全に浪費しなければならない.
すべてのカテゴリを一度に取り出し、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("" + dr["jobclassname"].ToString() + "
");
else
Response.Write(""+dr["jobclassname"].ToString()+"");
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();
}
}
これでは、資源を無駄にする必要はありません.
実はこの文章は少し強引で、普通の分類はすべてめったに変えないで、直接キャッシュあるいは静態化の処理でいいので、ただO(∩∩)O~(