在我的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}}吗?
或者有更好的方法吗?我缺少的东西
答案 0 :(得分:2)
您的GridView定义中是否有DataKeyNames="pageid"
?如果您已将此列设置为表的主键,则应自动将其包含在GridView中。
确保您的主键已通过
DataKeyNames,包括你的pk,你的选择命令中的值
删除/更新paramname,将您的datakeynames包含在parametername中
将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
。