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

posted on 2012-10-29 17:40  我还有  阅读(155)  评论(0编辑  收藏  举报

导航