1

DeleteCommand在我的 gridview 上,我想激活删除按钮。我已将删除按钮添加到grideview 和SqlDataSource.

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

</asp:SqlDataSource>

如您所见,我可以SelectParameters从 QueryStringField 添加 pageid。现在我想再添加一个,DeleteParametersasp:SqlDataSource@rowNumberdatakeyname的 gridview。如何将其添加datakeyname到 sql 中DeleteParameters

还是有更好的方法?我想念的东西

4

2 回答 2

2

DataKeyNames="pageid"您的 GridView 定义中有一个吗?如果您已将此列设置为表的主键,它应该自动包含在您的 GridView 中。

确保您的主键通过了想法

  1. DataKeyNames,包括您的 pk,您的选择命令中的值

  2. 删除/更新参数名,将您的数据键名包含到参数名中

  3. 使用参数作为 where 条件,WHERE primarykeyfield=@paramname

于 2013-09-24T11:16:03.777 回答
2

在删除(以及更新)操作期间,数据绑定控件将当前和原始记录值都传递给SqlDataSource控件。当前值在 Values 字典中传递。原始值在 Keys 或 OldValues 字典中传递。

这意味着 ifrowNumber实际上是一个 Column 并且应该用作删除命令中的参数,只需将删除命令设置为:

"DELETE FROM [sydShopOrder] WHERE rowNumber=@rowNumber"

只要您为每个参数指定与其影响的字段相同的名称并在其前面加上@符号(因此FirstName变为@FirstName),您就不需要定义参数。这是因为 ASP.NET 数据控件会在触发更新之前自动提交具有新值的参数集合。集合中的每个参数都使用此命名约定。

一种特殊情况,当您要删除数据时,其他用户可能会更改相同的数据,因此在这种情况下,您可能不想删除它。

在这种情况下,使用属性:OldValuesParameterFormatStringSqlDataSource 作为:

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

只需确保DataKeyNames将 GridView 的属性设置为包含 PrimaryKeys,因为它用于匹配记录值。检查this link

于 2013-09-24T11:37:34.697 回答