【IT168技术文档】
最近要做一个图书分类列表显示,要用到这个,想了好久,又在网上搜了一下,才搞定
关键的就是在外层DataList的ItemDataBound的事件中使用e.Item.FindControl()来找到自己所需要的(在外层)数据
我郁闷的就是自己开始是在DataBinding事件中处理,试了很多遍都没有搞定.
自己先拖一个DataList1,编辑模板里面放一个Lable1,在DataList1里面再放一个DataList2,同样在DataList2编辑模板放一个Lable2.当然,两个Lable的数据绑定字段是要自己写一下的.
看一下代码吧,这个很简单
那个Book.DAL.DBAccess是我自己写的一个用来数据库访问并执行语句的类,不用管它,可以用我们一般最简答的数据库访问的过程替代.重要的看一下这句,这个是获得外层的值,在这里就是图书分类的1级分类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 }
string f = ((Label)e.Item.FindControl("Label1")).Text;
还有这句,这个是找到内层的DataList,找到它后给它的数据源赋值就OK了
DataList dl2 = (DataList)e.Item.FindControl("DataLis2");
当然,我们也可以利用这个思想嵌套使用其他的数据控件