repeater实现删除按钮

Repeater和DataGrid相比,repeater集成了较少的功能,高可定制化,repeater在客户端生成的html代码是非常干净的。但正是由于Repeater的简单,给我们带来了一定的开发难度。比如在datagrid中要删除一行数据,那么仅仅是一个linkbutton,然后在datagrid的delete command事件中编写删除代码,但是在repeater中,你几乎没有办法在那个事件中定位是哪行触发的删除事件。

方法一、通过URL来传递参数

后台代码

protected void btnDelete_Click(object sender, CommandEventArgs e)
{
     int itemId = int.Parse(e.CommandName);
//得到需要删除的记录的编号(Id)
     string delSql = "delete from xy_action where actionid=" +
itemId;//生成Sql 语句。
    
//执行sql语句。}

前台代码

<asp:LinkButton id="btnDelete" CommandName='<%#DataBinder.Eval(Container, "ItemId") %>'OnCommand="btnDelete_Click"runat="server">
删除
</asp:LinkButton>

<ItemTemplate>
   <div>
       <%#"<a href=\"File.aspx?Action=Delete&Id="+DataBinder.Eval(Container.DataItem,"ItemId") +"\">删除</a>" %>
   </div>
</ItemTemplate>


后台page_load()代码如下:

if (Request.QueryString["Action"] == "Delete" && Request.QueryString["Delid"] != null)
{
     string delId = int.Parse(Request.QueryString["Id"]); //得到需要删除的记录的编号(Id)
     string sql = "Delete From SomeTable Where ItemId=" + delId; //生成Sql 语句。
     //执行sql语句。
}


方法二、

通过CommandName来传递编号

//////////////////////////////////////////////

Repeater控件用得不是很多,用起来显示数据非常方便,可以自定义显示的格式,很灵活。性能也要比GridView好多了,但是 Repeater没有封装"修改" "删除"等功能,可是有时候却需要这种功能却不想去用GridView。本人就遇到过这种情况,开始只想对数据进行显示没有删除的意思,但是后来考虑到还 需要一个删除功能,但分页都已经做好了,不想改用GridView。心想Repeater控件实现删除功能应该不麻烦吧!于是偷懒到百度一搜没找到。 困难就在于怎么取当前行的ID,GridView里可以设置DataKeyName的,在通过取每行的keyname值来取的,而Vs2005的 GridView更简单,添加删除完全封装了,不用写额外代码。但Repeater正为了灵活性已经没这属性了,问问群里高手。终于有解决办法了,通过删 除按钮Button的CommandName的绑定来取的ID值 CommandName='<%# Eval("ID") %>' ,然后一个 OnCommand="BtnDel_Click"响应事件,对之进行删除
protected void BtnDel_Click(object sender, CommandEventArgs e)
    {
        int ID = Convert.ToInt32(e.CommandName);
        string delSql = "delete from mailbox where id=" + ID;
        try
        {
            DataUse.ExcuteNoqueryUser(delSql);
            JSUtil.Alert(this.Page, "删除成功!");
            Server.Transfer("Mail_Admin.aspx");
        }
        catch (Exception ex)
        {
            JSUtil.Alert(this.Page, ex.Message);
        }
    }
上面方法的特别之处就是通过CommandName来绑定主键ID值再传给事件里的sql变量

posted @ 2013-02-20 13:49  卡萨丁·周  阅读(195)  评论(0编辑  收藏  举报