动态创建服务器控件,获取HTML输出(用于生成静态文件,简化页面,简化编程等)
写了一个来测试,还好上一个项目中wnh写的一段代码供参考,不然今天靠一个手机无线上网是搞不定的。
下午快下班的时候想到这个,跟z和q说了一下,也不知他们听懂没我说的什么意思。回来测试,居然成功了 :)
倒是先被ItemTemplate卡住了,动态创建的DataList,哪来ItemTemplate呢?还好用Item.Controls.Add搞定。
准备用在静态化上,DataGrid/DataList/Repeater都可以用这样的方式使用。省时省力结构还清晰,越来越喜欢DataBind了——这句话至开始使用.NET已经说了很多次了哦——只可惜我那本来就不熟练的写算法写循环控制,又要更加退化了。
理论上(还没有仔细思考,做出来这个就懒了,先不想思考问题了),还可以用来实现N级的DataList嵌套吧。
下午快下班的时候想到这个,跟z和q说了一下,也不知他们听懂没我说的什么意思。回来测试,居然成功了 :)
倒是先被ItemTemplate卡住了,动态创建的DataList,哪来ItemTemplate呢?还好用Item.Controls.Add搞定。
准备用在静态化上,DataGrid/DataList/Repeater都可以用这样的方式使用。省时省力结构还清晰,越来越喜欢DataBind了——这句话至开始使用.NET已经说了很多次了哦——只可惜我那本来就不熟练的写算法写循环控制,又要更加退化了。
理论上(还没有仔细思考,做出来这个就懒了,先不想思考问题了),还可以用来实现N级的DataList嵌套吧。
1 private void CreateDataList()
2 {
3 sql = "SELECT Build_Id, Name FROM House_Build";
4 dt = new DataTable();
5 da = new SqlDataAdapter(sql, conn);
6 da.Fill(dt);
7 da.Dispose();
8
9 DataList dl = new DataList();
10 dl.RepeatColumns = 3;
11 dl.RepeatLayout = RepeatLayout.Table;
12 dl.DataSource = dt;
13 dl.ItemDataBound += new DataListItemEventHandler(this.BindDataList);
14 dl.DataBind();
15 dt.Dispose();
16
17
18 string strHtml;
19 System.IO.StringWriter sw = new System.IO.StringWriter();
20 HtmlTextWriter htw = new HtmlTextWriter(sw);
21 dl.RenderControl(htw);
22 strHtml = sw.ToString();
23 Response.Write(strHtml);
24 }
25
26
27 protected void BindDataList(object sender, DataListItemEventArgs e)
28 {
29 if (e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem)
30 {
31 DataRowView thisRow = (DataRowView) e.Item.DataItem;
32
33 if (thisRow!=null)
34 {
35 Literal lit = new Literal();
36 lit.Text = string.Format("<div>{0}</div>\n<p>{1}</p>", thisRow["Build_Id"], thisRow["Name"]);
37 e.Item.Controls.Add(lit);
38 }
39 }
40 } /* ReCreate */
2 {
3 sql = "SELECT Build_Id, Name FROM House_Build";
4 dt = new DataTable();
5 da = new SqlDataAdapter(sql, conn);
6 da.Fill(dt);
7 da.Dispose();
8
9 DataList dl = new DataList();
10 dl.RepeatColumns = 3;
11 dl.RepeatLayout = RepeatLayout.Table;
12 dl.DataSource = dt;
13 dl.ItemDataBound += new DataListItemEventHandler(this.BindDataList);
14 dl.DataBind();
15 dt.Dispose();
16
17
18 string strHtml;
19 System.IO.StringWriter sw = new System.IO.StringWriter();
20 HtmlTextWriter htw = new HtmlTextWriter(sw);
21 dl.RenderControl(htw);
22 strHtml = sw.ToString();
23 Response.Write(strHtml);
24 }
25
26
27 protected void BindDataList(object sender, DataListItemEventArgs e)
28 {
29 if (e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem)
30 {
31 DataRowView thisRow = (DataRowView) e.Item.DataItem;
32
33 if (thisRow!=null)
34 {
35 Literal lit = new Literal();
36 lit.Text = string.Format("<div>{0}</div>\n<p>{1}</p>", thisRow["Build_Id"], thisRow["Name"]);
37 e.Item.Controls.Add(lit);
38 }
39 }
40 } /* ReCreate */