C#控件之Repeater控件使用
歡迎大家來討論,修改,一定虛心接受。
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;
}
}
}