在一個CommandField中為刪除按鈕設定OnClientClick屬性

來源:互聯網
上載者:User
 

在一個CommandField中為刪除按鈕設定OnClientClick屬性

在模板中直接使用Button,LinkButton,或者ImageButton的時候,可以直接為它的OnClientClick屬性設定確認視窗並返回confirm(string) JavaScript的傳回值。然而,CommandField是在GridView或者DetailsView上內建的一些刪除按鈕,而且它們本身不具有OnClientClick屬性可以設定聲明。相反,我們必須要在處理GridView或者DetailsView,它們適當的DataBound事件的代碼中,引用這個刪除按鈕,然後在那裡設定它的OnClientClick屬性。

 注意:
當我們在適當的DataBound事件處理器中設定刪除按鈕的OnClientClick屬性時候,我們已經有許可權訪問當前繫結資料。這意味著我們可以擴充確認資訊,並包含具體記錄的詳細資料,比如,“你確定要刪除這個Chai產品嗎?“這些定製也可以在模板的資料繫結的文法中實現。

 為了實踐在一個CommandField中設定刪除按鈕的OnClientClick屬性,我們在頁面上添加一個GridView。配置這個GridView使用FormView一樣的ObjectDataSource控制項。同時,限制GridView的BoundFields屬性只包括產品名稱,分類和供應商。最後,在GridView的屬性視窗中勾上Enable Deleting的多選框。這樣會在GridView的ColumnCollection的集合中添加一列CommandField,並且它的ShowDeleteButton屬性會設定成true。

 做了這些改變後,你的GridView的聲明標記應該如下所示:

 

 1<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID"
 2
 3    DataSourceID="ObjectDataSource1" EnableViewState="False">
 4
 5    <Columns>
 6
 7        <asp:CommandField ShowDeleteButton="True" />
 8
 9        <asp:BoundField DataField="ProductName" HeaderText="Product" SortExpression="ProductName" />
10
11        <asp:BoundField DataField="CategoryName" HeaderText="Category" ReadOnly="True" SortExpression="CategoryName" />
12
13        <asp:BoundField DataField="SupplierName" HeaderText="Supplier" ReadOnly="True" SortExpression="SupplierName" />
14
15    </Columns>
16
17</asp:GridView>
18

 

 
這個CommandField包含一個刪除LinkButton執行個體,並且可以在GridView的RowDataBound事件處理器中被訪問。一旦被引用,我們就可以相應地設定它的OnClientClick屬性。通過下面的代碼來建立一個RowDataBound事件的處理器:

 

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

{

    if (e.Row.RowType == DataControlRowType.DataRow)

    {

        // reference the Delete LinkButton

        LinkButton db = (LinkButton)e.Row.Cells[0].Controls[0];

 

        // Get information about the product bound to the row

        Northwind.ProductsRow product = (Northwind.ProductsRow) ((System.Data.DataRowView) e.Row.DataItem).Row;

 

        db.OnClientClick = string.Format("return confirm('Are you certain you want to delete the {0} product?');", 

        product.ProductName.Replace("'", @"\'"));

    }

}

 

 

這個事件處理器將在代碼中綁定資料和引用刪除按鈕的時候被調用。總的來說,使用了以下模式:

 

ButtonType obj = (ButtonType) e.Row.Cells[commandFieldIndex].Controls[controlIndex];

 

ButtonType是被CommandField使用的一種按鈕類型,可以是Button,LinkButton,或者ImageButton。預設情況下,CommandField使用LinkButton,但也可以通過CommandField的ButtonType屬性來定製。CommandFieldIndex是CommandField在GridView中Columns集合中的原始索引,而controlIndex是刪除按鈕在CommandField的Controls集合中的索引。controlIndex的值由按鈕在CommandField中和其他按鈕的相對位置決定。例如,如果在CommandField中只有一個刪除按鈕,那麼它的索引就是0。然而,如果在刪除按鈕前面還有一個編輯按鈕,那麼索引值是2。因為在刪除按鈕前面有兩個控制項,一個是編輯按鈕,另一個是LiteralControl,用來隔離編輯按鈕和刪除按鈕。

 在我們的例子中,CommandField使用了LinkButton,在最左端,commandFieldIndex的值是0。因為除了刪除按鈕,沒有其他控制項,所以controlIndex的值也為0。

 在引用了CommandField中的刪除按鈕之後,我們接下來可以獲得GridView當前資料列的一些產品資訊。最後,我們為刪除按鈕設定了OnClientClick屬性的JavaScript值,其中包含了產品的名稱。因為我們用單引號標記了傳入confirm(string)的字串參數,對於產品的名稱我們必須要過濾可能出現在其中的單引號。具體來說,我們可以把產品名稱中含有的單引號轉義成,“\’“。

 做完這些改變之後,點擊GridView中的刪除按鈕,可以顯示一個定製後的確認資訊(見圖4)。如果使用者點擊彈出的確認視窗中的取消,回傳將會被取消,從而阻止了刪除操作發生。

 注意:
我們同樣可以在代碼中對DetailsView的CommandField使用這種技術。然而對於DetailsView,你需要為DataBound事件提供一個處理器,因為它沒有RowDataBound事件。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.