11
手寫Repeater撈資料-並減少EnableViewState資料的方式
拉一個Repeater近來,剩下讀取資料都是寫在程式碼裡,此方式增加網頁效能,
另外並關閉PlaceHolder的EnableViewState。
PlaceHolder為建立RepeaterItem的容器,因為大部份資料都是在PlaceHolder容器裡,
所以只要關閉PlaceHolder的EnableViewState即可,比較不會造成其他控制項的問題。
========== Default.aspx ===================================
<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”Default.aspx.cs” Inherits=”Performance_Default” %>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml” >
<head runat=”server”>
<title>未命名頁面</title>
</head>
<body>
<form id=”form1″ runat=”server”>
<div>
<asp:Repeater ID=”Repeater1″ runat=”server” >
</asp:Repeater>
</div>
</form>
</body>
</html>
========== Default.aspx.cs ===================================
protected void Page_Load(object sender, EventArgs e)
{
System.Data.SqlClient.SqlConnection conn =
new System.Data.SqlClient.SqlConnection(
_ConnStr_Performance);
System.Data.SqlClient.SqlDataAdapter sqlDataAdapter1;
System.Data.DataSet dsCategories1;
sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter(
“SELECT top 100 item , item_name , dep_no , dep_name ” +
“FROM dbo.CHUDATA_PUB_V2 “, conn);
dsCategories1 = new System.Data.DataSet();
Repeater1.HeaderTemplate = new MyTemplate(ListItemType.Header);
Repeater1.ItemTemplate = new MyTemplate(ListItemType.Item);
Repeater1.AlternatingItemTemplate =
new MyTemplate(ListItemType.AlternatingItem);
Repeater1.FooterTemplate = new MyTemplate(ListItemType.Footer);
sqlDataAdapter1.Fill(dsCategories1, “CHUDATA_PUB_V2”);
Repeater1.DataSource = dsCategories1.Tables[“CHUDATA_PUB_V2”];
Repeater1.DataBind();
}
public class MyTemplate : System.Web.UI.ITemplate
{
System.Web.UI.WebControls.ListItemType templateType;
public MyTemplate(System.Web.UI.WebControls.ListItemType type)
{
templateType = type;
}
public void InstantiateIn(System.Web.UI.Control container)
{
PlaceHolder ph = new PlaceHolder();
ph.EnableViewState = false;
Label item1 = new Label();
Label item2 = new Label();
item1.ID = “item”;
item2.ID = “dep_name”;
switch (templateType)
{
case ListItemType.Header:
ph.Controls.Add(new LiteralControl(“<table border=\”1\”>” +
“<tr><td><b>EmpNo</b></td>” +
“<td><b>MgrOpinion</b></td></tr>”));
break;
case ListItemType.Item:
ph.Controls.Add(new LiteralControl(“<tr><td>”));
ph.Controls.Add(item1);
ph.Controls.Add(new LiteralControl(“</td><td>”));
ph.Controls.Add(item2);
ph.Controls.Add(new LiteralControl(“</td></tr>”));
ph.DataBinding += new EventHandler(Item_DataBinding);
break;
case ListItemType.AlternatingItem:
ph.Controls.Add(new LiteralControl(“<tr bgcolor=\”lightblue\”><td>”));
ph.Controls.Add(item1);
ph.Controls.Add(new LiteralControl(“</td><td>”));
ph.Controls.Add(item2);
ph.Controls.Add(new LiteralControl(“</td></tr>”));
ph.DataBinding += new EventHandler(Item_DataBinding);
break;
case ListItemType.Footer:
ph.Controls.Add(new LiteralControl(“</table>”));
break;
}
container.Controls.Add(ph);
}
}
static void Item_DataBinding(object sender, System.EventArgs e)
{
PlaceHolder ph = (PlaceHolder)sender;
RepeaterItem ri = (RepeaterItem)ph.NamingContainer;
String item1Value = (String)DataBinder.Eval(ri.DataItem, “item”);
String item2Value = (String)DataBinder.Eval(ri.DataItem, “dep_name”);
((Label)ph.FindControl(“item”)).Text = item1Value.ToString();
((Label)ph.FindControl(“dep_name”)).Text = item2Value;
}
There are no comments.