歡迎大家來討論,修改,一定虛心接受。
1.為什麼使用Repeater控件?
關於把從數據庫讀取的數據綁定到前台頁面,我們可以使用DataGrid、DataGridView以及Repeater來佈局,三者均可以直接綁定DataTable中的字段,但是對於特殊的表格,如需要跨行或跨列顯示的數據,則需要重畫一個table,然後再綁定數據。
2.Repeater控件之好處
我們可以自由的定義Table的表頭、表身和表尾。
3.Repeater控件一些基礎設定
例:以下例子展示了如何對Repeater控件進行綁定,并實現在table中實現編輯和更新數據行的操作
html端代碼:
<asp:Repeater runat="server" ID="reportRepeater" OnItemCommand="reportRepeater_ItemCommand"
OnItemDataBound="reportRepeater_ItemDataBound">
<HeaderTemplate>
<table>
<tr><th></th>
<th>用戶ID</th>
<th>用戶名</th>
<th>籍貫</th>
<th>民族</th></tr>
</HeaderTemplate>
<ItemTemplate>
<asp:Panel ID="plItem" runat="server">
<tr><td><asp:ImageButton ID="imgInvEdit" CommandName="EDIT" ToolTip="編輯" CommandArgument='<%#Eval("userID")%>'
ImageUrl="../Images/edit1.gif" runat="server" Visible="false" />
<asp:ImageButton ID="imgInvDelete" CommandName="DELETE" ToolTip="刪除" CommandArgument='<%#Eval("userID")%>'
ImageUrl="../Images/delete.gif" runat="server" Visible="false" /></td>
<td><%#Eval("userID")%></td>
<td><%#Eval("username")%></td>
<td><%#Eval("birthplace")%></td>
<td><%Eval("nationality")%></td><tr>
</asp:Panel>
<asp:Panel ID="plItem" runat="server">
<tr><td><asp:ImageButton ID="imgInvUpdate" CommandName="UPDATE" ToolTip="更新" CommandArgument='<%#Eval("userID")%>'
ImageUrl="../Images/update.gif" runat="server" Visible="false" />
<asp:ImageButton ID="imgInvCancel" CommandName="CANCEL" ToolTip="取消" CommandArgument='<%#Eval("userID")%>'
ImageUrl="../Images/cancel.gif" runat="server" Visible="false" /></td>
<td><%#Eval("userID")%></td>
<td><%#Eval("username")%></td>
<td><%#Eval("birthplace")%></td>
<td><%Eval("nationality")%></td><tr>
</asp:Panel>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
C#後端代碼:
protected void Page_Load(object sender, EventArgs e)
{
if(Page.IsPostBack)
{
BindData();
}
}
protected void BindData()
{
string sql = "select * from user";
DAL.DAL dal = new DAL.DAL();
DataTable dt = dal.ExecuteDataSet(Properties.Settings.Default.DBWF, sql).Tables[0];
reportRepeater.DataSource = dt;
reportRepeater.DataBind();
}
protected void reportRepeater_ItemCommand(object source, RepeaterCommandEventArgs e)
{
switch (e.CommandName.Trim().ToUpper())
{
case "EDIT":
{
id = e.CommandArgument.ToString();
break;
}
case "UPDATE":
{
//更新數據庫
break;
}
case "CANCEL":
{
id="";
break;
}
case "DELETE":
{
//從數據庫刪除
break;
}
//數據綁定
BindData();
}
protected void reportRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)//Item綁定時可以在此做一些操作
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)//
{
System.Data.DataRowView record = (System.Data.DataRowView)e.Item.DataItem;
string userID= record["userID"].ToString();
if (userID.Equals(id))//當點擊不同的按鈕時對Pannel控件進行隱藏和顯示,達到在table內編輯行的效果
{
((Panel)e.Item.FindControl("plItem")).Visible = false;
((Panel)e.Item.FindControl("plEdit")).Visible = true;
}
else
{
((Panel)e.Item.FindControl("plItem")).Visible = true;
((Panel)e.Item.FindControl("plEdit")).Visible = false;
}
}
}