1. 程式人生 > >repeater實現刪除按鈕

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變數