Repeater控件学习心得
前台代码:
View Code
<style> .disRow { color:#ff0000; font-size:14px; font-family:"宋体"; } </style> <body> <form id="form1" runat="server"> <div> <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DeleteMethod="Delete" InsertMethod="Insert" OldValuesParameterFormatString="original_{0}" SelectMethod="GetData" TypeName="DataSet2TableAdapters.T_UserTableAdapter" UpdateMethod="Update"> <DeleteParameters> <asp:Parameter Name="Original_Id" Type="Int32" /> </DeleteParameters> <InsertParameters> <asp:Parameter Name="UserName" Type="String" /> <asp:Parameter Name="Status" Type="String" /> </InsertParameters> <UpdateParameters> <asp:Parameter Name="UserName" Type="String" /> <asp:Parameter Name="Status" Type="String" /> <asp:Parameter Name="Original_Id" Type="Int32" /> </UpdateParameters> </asp:ObjectDataSource> </div> <asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1" onitemdatabound="Repeater1_ItemDataBound" onitemcommand="Repeater1_ItemCommand"> <HeaderTemplate> <table> <tr> <td>用户名</td> <td>状态</td> <td>操作</td> </tr> </HeaderTemplate> <ItemTemplate> <tr id="rowTd" runat="server"> <td><%#Eval("UserName") %></td> <td><%#Eval("Status") %></td> <td> <asp:Button ID="btnEnable" runat="server" Text="启用" CommandName="Enable" CommandArgument='<%#Eval("Id") %>' OnClientClick="return confirm('真的要启用吗')" /> <asp:Button ID="btnDisabled" runat="server" Text="禁用" CommandName="Disabled" CommandArgument='<%#Eval("Id") %>' OnClientClick="return confirm('真的要禁用吗')" /> </td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:Repeater> </form> </body>
View Code
图片展示
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)//一开始看视频没注意这里,导致浪费了大把时间,严谨真的是必须的 { DataRowView rowView = (DataRowView)e.Item.DataItem;//上面不做判断这里rowView获得的会是空,详细错误会在下图展示1 DataSet2.T_UserRow userRow = (DataSet2.T_UserRow)rowView.Row; if (userRow.Status == "禁用") { HtmlTableRow trRow = (HtmlTableRow)e.Item.FindControl("rowTd");//因为tr的是在控件Repeater里的Itemplate中,直接获取id获取不到利用FindControl便可以获取 trRow.Attributes["class"] = "disRow"; Button btnEnable = (Button)e.Item.FindControl("btnEnable"); Button btnDisabled = (Button)e.Item.FindControl("btnDisabled"); btnEnable.Visible = true; btnDisabled.Visible = false; } else if (userRow.Status == "启用") { HtmlTableRow trRow = (HtmlTableRow)e.Item.FindControl("rowTd"); trRow.Attributes["class"] = ""; Button btnEnable = (Button)e.Item.FindControl("btnEnable"); Button btnDisabled = (Button)e.Item.FindControl("btnDisabled"); btnEnable.Visible = false; btnDisabled.Visible = true; } else { throw new Exception("非法操作"); } } } protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e) { if (e.CommandName == "Enable") { int id = Convert.ToInt32(e.CommandArgument); T_UserTableAdapter adapter = new T_UserTableAdapter(); adapter.UpdateDisabled(id); Repeater1.DataBind(); } else if (e.CommandName == "Disabled") { int id = Convert.ToInt32(e.CommandArgument); T_UserTableAdapter adapter = new T_UserTableAdapter(); adapter.UpdateEnable(id); Repeater1.DataBind();//即使更新数据 } }
这里断点快速监测e就会得一个惊人的发现
得出结论不做判断ItemType的值就会变成Header