2013-09-24 57 views
1

在我的gridview我想激活刪除按鈕。我已經添加刪除按鈕到grideview和DeleteCommandSqlDataSource添加datakeyname到sql參數

<asp:SqlDataSource ID="SqlDataSource1" runat="server" SelectCommand="SELECT rowNumber, firstName as 'Fornavn' where [email protected] order by firstName asc" DeleteCommand="DELETE FROM [sydShopOrder] WHERE [email protected]"> 
    <SelectParameters><asp:QueryStringParameter Name="pageid" QueryStringField="id"/> </SelectParameters> 

</asp:SqlDataSource> 

,你可以看到我能夠從QueryStringField.Now添加SelectParameters的pageid我想多一個DeleteParameters到這個asp:SqlDataSource這是@rowNumber,這是我爲datakeyname我gridview.How可以此datakeyname增加sql DeleteParameters

還是有更好的辦法?我丟失的東西

+0

希望這會幫助你http://msdn.microsoft.com/en-us/library/ms972940.aspx –

+0

我的意見是要做的一切在代碼隱藏.. – Sasidharan

回答

2

在刪除(以及更新)操作期間,數據綁定控件將當前記錄值和原始記錄值傳遞給SqlDataSource控件。當前值在Values字典中傳遞。原始值在Keys或OldValues字典中傳遞。

這意味着,如果rowNumber實際上是一個列,應該被用作刪除命令的參數,只需要設定的刪除命令:

"DELETE FROM [sydShopOrder] WHERE [email protected]" 

只要你給每個參數相同的名稱作爲它影響的字段,並以@符號(因此FirstName變爲@FirstName)開頭,您不需要定義參數。 這是因爲在觸發更新之前,ASP.NET數據控件會自動提交包含新值的參數集合。集合中的每個參數都使用此命名約定。

一種特殊情況是,當您要刪除數據時,其他用戶可能會更改相同的數據,因此在這種情況下,您可能不希望將其刪除。

在這種情況下,使用屬性:SqlDataSource控件的OldValuesParameterFormatString爲:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    SelectCommand="SELECT rowNumber, firstName as 'Fornavn' 
       where [email protected] order by firstName asc" 
    DeleteCommand="DELETE FROM [sydShopOrder] WHERE [email protected]_rowNumber"> 
    OldValuesParameterFormatString="original_{0}" 
> 
</asp:SqlDataSource> 

只要確保你設置在GridView的DataKeyNames財產,包括您的PrimaryKeys,因爲它是用來匹配記錄的值。檢查this link

2

你有沒有在你的GridView定義一個DataKeyNames="pageid"?如果您已將此列設置爲表格的主鍵,則它應自動包含在GridView中。

確保您的主鍵傳遞以爲

  1. 的DataKeyNames,包括你的PK,從你選擇命令值

  2. 刪除/更新PARAMNAME,包括你的DataKeyNames的參數名稱

  3. 使用param作爲where條件,WHERE primarykeyfield = @參數名