将datakeyname添加到sql参数

时间:2013-09-24 10:32:17

标签: c# asp.net sql gridview

在我的gridview上,我想激活删除按钮。我已将删除按钮添加到grideview,DeleteCommand添加到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>

正如您所看到的,我可以从QueryStringField添加SelectParameters pageid。现在我想再向DeleteParameters asp:SqlDataSource添加一个@rowNumber,这是datakeyname我的datakeyname用于gridview.How我可以将此DeleteParameters添加到sql {{1}}吗?

或者有更好的方法吗?我缺少的东西

2 个答案:

答案 0 :(得分:2)

您的GridView定义中是否有DataKeyNames="pageid"?如果您已将此列设置为表的主键,则应自动将其包含在GridView中。

确保您的主键已通过

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

  2. 删除/更新paramname,将您的datakeynames包含在parametername中

  3. 将param用作where condition,WHERE primarykeyfield = @ paramname

答案 1 :(得分:2)

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

这意味着如果rowNumber实际上是一个列并且应该在delete命令中用作参数,只需将delete命令设置为:

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

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

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

在这种情况下,请使用SqlDataSource的属性:OldValuesParameterFormatString

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

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