首页 > 代码库 > Repeater的ItemCommand事件
Repeater的ItemCommand事件
Repeater一般只用来展示数据,如果要增删改查(CRUD)则用ListView更方便。
使用向导(强类型数据)来使用ListView会自动生成很多模板,免去手写模板代码的麻烦,再进行手工调整即可。 首先设定数据源,然后点击智能提示中的“配置ListView”,选择一种布局和样式,然后根据需要勾选“启用编辑”、“启用删除”、“启用插入”、“启用分页”,就会自动生成常用的模板。注意这只是提高开发效率的一个快捷方式,不是唯一的途径。
【LayoutTemplate】为布局模板,布局模板中必须有一个ID为【itemPlaceholder】的服务端控件,项占位符(4.0以后不需要),什么类型无所谓,不会被显示,itemPlaceholder前面就是相当于Repeater中的HeaderTemplate,itemPlaceholder后面就是相当于Repeater中的FooterTemplate,因此ListView中没有这两个模板。
【ItemTemplate】是每一项的模板,AlternatingItemTemplate是隔行显示的模板,和Repeater一样。EmptyDataTemplate为数据源没有数据的时候显示的内容(Insert也算数据),这样的话可以实现“没有查找结果”、“对不起,找不到您要找的数据”等,InsertItemTemplate为插入数据界面的模板,EditItemTemplate为编辑数据的模板,InsertItemTemplate,为插入数据的模板,SelectedItemTemplate为标记为Selected的行的模板。
1、生成的样式要提到style中,不要内联样式。
2、ItemTemplate里面一般也没必要用<asp:Label展示只读数据,所以直接输出<%# Eval("Name") %>
3、LayoutTemplate中必须有一个id为itemPlaceholder的服务端控件,之上为头,之下为尾。
4、LayoutTemplate表头内容要汉化,所有Template中的不需要显示的字段,比如Id,都要删掉。
1 <%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeBehind="5ListView.aspx.cs" Inherits="Maticsoft.Web._5ListView" %> 2 3 <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 4 </asp:Content> 5 <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 6 7 <asp:ListView ID="ListView1" runat="server" DataKeyNames="TypeId" DataSourceID="ObjectDataSource1" InsertItemPosition="LastItem"> 8 <AlternatingItemTemplate> 9 <tr style="background-color: #FFFFFF;color: #284775;"> 10 <td > 11 <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="删除" /> 12 <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="编辑" /> 13 </td> 14 <%-- <td> 15 <asp:Label Visible="false" ID="TypeIdLabel" runat="server" Text=‘<%# Eval("TypeId") %>‘ /> 16 </td>--%> 17 <td> 18 <asp:Label ID="TypeNameLabel" runat="server" Text=‘<%# Eval("TypeName") %>‘ /> 19 </td> 20 <td> 21 <asp:Label ID="PriceLabel" runat="server" Text=‘<%# Eval("Price") %>‘ /> 22 </td> 23 <td> 24 <asp:CheckBox ID="AddBedCheckBox" runat="server" Checked=‘<%# Eval("AddBed") %>‘ Enabled="false" /> 25 </td> 26 <td> 27 <asp:Label ID="BedPriceLabel" runat="server" Text=‘<%# Eval("BedPrice") %>‘ /> 28 </td> 29 <td> 30 <asp:Label ID="RemarkLabel" runat="server" Text=‘<%# Eval("Remark") %>‘ /> 31 </td> 32 </tr> 33 </AlternatingItemTemplate> 34 <EditItemTemplate> 35 <tr style="background-color: #999999;"> 36 <td > 37 <asp:Button ID="UpdateButton" runat="server" CommandName="Update" Text="更新" /> 38 <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="取消" /> 39 </td> 40 <%-- <td> 41 <asp:TextBox Visible="false" ID="TypeIdTextBox" runat="server" Text=‘<%# Bind("TypeId") %>‘ /> 42 </td>--%> 43 <td> 44 <asp:TextBox ID="TypeNameTextBox" runat="server" Text=‘<%# Bind("TypeName") %>‘ /> 45 </td> 46 <td> 47 <asp:TextBox ID="PriceTextBox" runat="server" Text=‘<%# Bind("Price") %>‘ /> 48 </td> 49 <td> 50 <asp:CheckBox ID="AddBedCheckBox" runat="server" Checked=‘<%# Bind("AddBed") %>‘ /> 51 </td> 52 <td> 53 <asp:TextBox ID="BedPriceTextBox" runat="server" Text=‘<%# Bind("BedPrice") %>‘ /> 54 </td> 55 <td> 56 <asp:TextBox ID="RemarkTextBox" runat="server" Text=‘<%# Bind("Remark") %>‘ /> 57 </td> 58 </tr> 59 </EditItemTemplate> 60 <EmptyDataTemplate> 61 <table runat="server" style="background-color: #FFFFFF;border-collapse: collapse;border-color: #999999;border-style:none;border-width:1px;"> 62 <tr> 63 <td>未返回数据。</td> 64 </tr> 65 </table> 66 </EmptyDataTemplate> 67 <InsertItemTemplate> 68 <tr style=""> 69 <td > 70 <asp:Button ID="InsertButton" runat="server" CommandName="Insert" Text="插入" /> 71 <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="清除" /> 72 </td> 73 <%-- <td> 74 <asp:TextBox Visible="false" ID="TypeIdTextBox" runat="server" Text=‘<%# Bind("TypeId") %>‘ /> 75 </td>--%> 76 <td> 77 <asp:TextBox ID="TypeNameTextBox" runat="server" Text=‘<%# Bind("TypeName") %>‘ /> 78 </td> 79 <td> 80 <asp:TextBox ID="PriceTextBox" runat="server" Text=‘<%# Bind("Price") %>‘ /> 81 </td> 82 <td> 83 <asp:CheckBox ID="AddBedCheckBox" runat="server" Checked=‘<%# Bind("AddBed") %>‘ /> 84 </td> 85 <td> 86 <asp:TextBox ID="BedPriceTextBox" runat="server" Text=‘<%# Bind("BedPrice") %>‘ /> 87 </td> 88 <td> 89 <asp:TextBox ID="RemarkTextBox" runat="server" Text=‘<%# Bind("Remark") %>‘ /> 90 </td> 91 </tr> 92 </InsertItemTemplate> 93 <ItemTemplate> 94 <tr style="background-color: #E0FFFF;color: #333333;"> 95 <td > 96 <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="删除" /> 97 <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="编辑" /> 98 </td> 99 <%-- <td>100 <asp:Label Visible="false" ID="TypeIdLabel" runat="server" Text=‘<%# Eval("TypeId") %>‘ />101 </td>--%>102 <td>103 <asp:Label ID="TypeNameLabel" runat="server" Text=‘<%# Eval("TypeName") %>‘ />104 </td>105 <td>106 <asp:Label ID="PriceLabel" runat="server" Text=‘<%# Eval("Price") %>‘ />107 </td>108 <td>109 <asp:CheckBox ID="AddBedCheckBox" runat="server" Checked=‘<%# Eval("AddBed") %>‘ Enabled="false" />110 </td>111 <td>112 <asp:Label ID="BedPriceLabel" runat="server" Text=‘<%# Eval("BedPrice") %>‘ />113 </td>114 <td>115 <asp:Label ID="RemarkLabel" runat="server" Text=‘<%# Eval("Remark") %>‘ />116 </td>117 </tr>118 </ItemTemplate>119 <LayoutTemplate>120 <table runat="server">121 <tr runat="server">122 <td runat="server">123 <table id="itemPlaceholderContainer" runat="server" border="1" style="background-color: #FFFFFF;border-collapse: collapse;border-color: #999999;border-style:none;border-width:1px;font-family: Verdana, Arial, Helvetica, sans-serif;">124 <tr runat="server" style="background-color: #E0FFFF;color: #333333;">125 <th runat="server" ></th>126 <%--<th runat="server">TypeId</th>--%>127 <th runat="server" style="width:800px">TypeName</th>128 <th runat="server">Price</th>129 <th runat="server">AddBed</th>130 <th runat="server">BedPrice</th>131 <th runat="server">Remark</th>132 </tr>133 <tr id="itemPlaceholder" runat="server">134 </tr>135 </table>136 </td>137 </tr>138 <tr runat="server">139 <td runat="server" style="text-align: center;background-color: #5D7B9D;font-family: Verdana, Arial, Helvetica, sans-serif;color: #FFFFFF">140 <asp:DataPager ID="DataPager1" runat="server">141 <Fields>142 <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" ShowLastPageButton="True" />143 </Fields>144 </asp:DataPager>145 </td>146 </tr>147 </table>148 </LayoutTemplate>149 <SelectedItemTemplate>150 <tr style="background-color: #E2DED6;font-weight: bold;color: #333333;">151 <td >152 <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="删除" />153 <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="编辑" />154 </td>155 <%-- <td>156 <asp:Label Visible="false" ID="TypeIdLabel" runat="server" Text=‘<%# Eval("TypeId") %>‘ />157 </td>--%>158 <td>159 <asp:Label ID="TypeNameLabel" runat="server" Text=‘<%# Eval("TypeName") %>‘ />160 </td>161 <td>162 <asp:Label ID="PriceLabel" runat="server" Text=‘<%# Eval("Price") %>‘ />163 </td>164 <td>165 <asp:CheckBox ID="AddBedCheckBox" runat="server" Checked=‘<%# Eval("AddBed") %>‘ Enabled="false" />166 </td>167 <td>168 <asp:Label ID="BedPriceLabel" runat="server" Text=‘<%# Eval("BedPrice") %>‘ />169 </td>170 <td>171 <asp:Label ID="RemarkLabel" runat="server" Text=‘<%# Eval("Remark") %>‘ />172 </td>173 </tr>174 </SelectedItemTemplate>175 </asp:ListView>176 <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DataObjectTypeName="Maticsoft.Model.RoomType" DeleteMethod="Delete" InsertMethod="Add" SelectMethod="GetModelList" TypeName="Maticsoft.BLL.RoomType" UpdateMethod="Update">177 <SelectParameters>178 <asp:Parameter Name="strWhere" Type="String" />179 </SelectParameters>180 </asp:ObjectDataSource>181 182 </asp:Content>
----------------------------------------------------------------------------------------------------------------------------------------
Repeater控件可以在模板中放置Button控件【Button】、【LinkButton】、【ImageButton】,模板中的按钮一般不写OnClick事件响应,而是响应Repeater的ItemCommand事件。
为Button控件设定【CommandName】、【CommandArgument】属性,然后在ItemDataBound事件读取e的CommandName、CommandArgument属性就可以获得发生事件的命令和行参数了。
如果对数据进行了操作,则需要Repeater1.DataBind()来重新绑定,从数据库中刷新最新的数据。
1 <tr onm ouseover="changecolor(this)" onm ouseout="returncolor(this)"> 2 <td><%#Eval("TypeId") %></td> 3 <td><%#Eval("TypeName") %></td> 4 <td><asp:Label ID="lblprice" runat="server" Text=‘<%#Eval("Price") %>‘></asp:Label></td> 5 <td><%#Eval("AddBed") %></td> 6 <td><%#Eval("BedPrice") %></td> 7 <td><input type="text" value=http://www.mamicode.com/"<%#Eval("Remark") %>" readonly="readonly"/></td> 8 <td> 9 <asp:Button ID="btndel" runat="server" Text="删除" CommandName="del" CommandArgument=‘<%#Eval("TypeId") %>‘/>10 <asp:Button ID="btnedit" runat="server" Text="编辑" CommandName="edit" CommandArgument=‘<%#Eval("TypeId") %>‘/>11 </td>12 </tr>
1 protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e) 2 { 3 int id = Convert.ToInt32(e.CommandArgument); 4 5 if (e.CommandName == "del") 6 { 7 if (bll.Delete(id)) 8 { 9 Maticsoft.Common.MessageBox.Show(this, id.ToString()+"删除成功");10 Repeater1.DataBind();//需要Repeater1.DataBind()来重新绑定,从数据库中刷新最新的数据11 } 12 }13 else if (e.CommandName == "edit")14 {15 Maticsoft.Common.MessageBox.Show(this, id.ToString());16 }17 }
Repeater的ItemCommand事件