手寫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;
}

 

 

 

 

by mhchen15 on 11 11 月, 2014 in ASP.NET C# - Tags:
Tags:

There are no comments.

Name*: Website: E-Mail*:
XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>