鱼跃千里

 

DataList嵌套绑定数据

    最近要做一个图书分类列表显示,要用到这个,想了好久,又在网上搜了一下,才搞定
关键的就是在外层DataList的ItemDataBound的事件中使用e.Item.FindControl()来找到自己所需要的(在外层)数据
我郁闷的就是自己开始是在DataBinding事件中处理,试了很多遍都没有搞定.

自己先拖一个DataList1,编辑模板里面放一个Lable1,在DataList1里面再放一个DataList2,同样在DataList2编辑模板放一个Lable2.当然,两个Lable的数据绑定字段是要自己写一下的.
看一下代码吧,这个很简单
 1  protected void Page_Load(object sender, EventArgs e)
 2     {
 3         string s = "SELECT BookClass.* FROM BookClass WHERE (BookClassLevel = 0)";
 4         Book.DAL.DBAccess db = new Book.DAL.DBAccess();
 5         DataSet dr1 = db.ExecuteDataSet(s);
 6         DataList1.DataSource = dr1;
 7         DataList1.DataBind();
 8 
 9     }
10     protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
11     {
12         string f = ((Label)e.Item.FindControl("Label1")).Text;
13         string s = "SELECT BookClass.* FROM BookClass WHERE (BookClassFather  = @f)";
14 
15         Book.DAL.DBAccess db = new Book.DAL.DBAccess();
16         db.AddParameter("@f", f);
17         DataSet ds = db.ExecuteDataSet(s);
18         DataList dl2 = (DataList)e.Item.FindControl("DataLis2");
19         dl2.DataSource = ds;
20         dl2.DataBind();
21     }
那个Book.DAL.DBAccess是我自己写的一个用来数据库访问并执行语句的类,不用管它,可以用我们一般最简答的数据库访问的过程替代.重要的看一下这句,这个是获得外层的值,在这里就是图书分类的1级分类
string f = ((Label)e.Item.FindControl("Label1")).Text;
还有这句,这个是找到内层的DataList,找到它后给它的数据源赋值就OK了
DataList dl2 = (DataList)e.Item.FindControl("DataLis2");

当然,我们也可以利用这个思想嵌套使用其他的数据控件

posted on 2008-05-31 04:09  鱼跃千里  阅读(1499)  评论(1编辑  收藏  举报

导航