如何使此更新命令在gridview中工作



我有一个网格视图,可以根据需要正确地提取数据。我将其设置为自定义查询,因为我使用存储过程来更新和删除信息。我正在运行删除命令和更新命令,但只有删除命令有效。

我的update命令似乎设置正确,但当我更改其中一个项目的名称并单击update时,网格会返回到以前的位置,而不会发生更改。我也没有收到错误消息,所以我不知道如何解决这个问题。我在网上搜索了一下,试图找到答案,但似乎没有一个能解决这种情况。是否可能是"原始"参数导致了问题?我希望网格将旧值作为表中的复选框。如果这是造成问题的原因,有其他方法吗?

提前感谢!

这是我的网格视图代码:

<asp:GridView ID="gvArtists"
runat="server"
AllowPaging="True"
AllowSorting="True"
AutoGenerateColumns="False"
DataSourceID="gridView_Artists"
CssClass="table table-bordered table-condensed table-hover"
OnPreRender="gvArtists_PreRender"
OnRowDeleted="gvArtists_RowDeleted"
OnRowUpdated="gvArtists_RowUpdated">
<Columns>
<asp:BoundField DataField="artist_FirstName" HeaderText="First Name" 
SortExpression="artist_FirstName" ItemStyle-CssClass="col-xs-3" >
<ItemStyle CssClass="col-xs-3"></ItemStyle>
</asp:BoundField>
<asp:BoundField DataField="artist_LastName" HeaderText="Last Name" 
SortExpression="artist_LastName" ItemStyle-CssClass="col-xs-3" >
<ItemStyle CssClass="col-xs-3"></ItemStyle>
</asp:BoundField>
<asp:BoundField DataField="artist_band" HeaderText="Band" 
SortExpression="artist_band" ItemStyle-CssClass="col-xs-3" >
<ItemStyle CssClass="col-xs-3"></ItemStyle>
</asp:BoundField>
<asp:BoundField DataField="artist_type" HeaderText="Type" 
SortExpression="artist_type" ItemStyle-CssClass="col-xs-3" >
<ItemStyle CssClass="col-xs-3"></ItemStyle>
</asp:BoundField>
<asp:CommandField CausesValidation="False" ShowEditButton="True">
<ItemStyle CssClass="col-xs-1 text-danger" />
</asp:CommandField>
<asp:CommandField CausesValidation="False" ShowDeleteButton="True">
<ItemStyle CssClass="col-xs-1" /> 
</asp:CommandField>
</Columns>
<HeaderStyle CssClass="bg-halloween" />
<AlternatingRowStyle CssClass="altRow" />
<PagerSettings Mode="NumericFirstLast" />
<PagerStyle CssClass="pagerStyle" BackColor="#a8c8c8c" HorizontalAlign="Center" />
<EditRowStyle CssClass="warning" />
</asp:GridView>
<asp:SqlDataSource 
ID="gridView_Artists" 
runat="server" 
ConnectionString="<%$ ConnectionStrings:disk_inventoryConnectionString %>"
ConflictDetection="CompareAllValues"
SelectCommand="SELECT artist_FirstName,
artist_LastName,
artist_band,
artist_type
FROM ArtistInfo
ORDER BY artist_LastName"
DeleteCommand="sp_DeleteArtistInfo"
DeleteCommandType="StoredProcedure"
UpdateCommand="sp_UpdateArtistInfo"
UpdateCommandType="StoredProcedure">
<DeleteParameters>
<asp:Parameter Name="artist_FirstName" Type="String"></asp:Parameter>
<asp:Parameter Name="artist_LastName" Type="String"></asp:Parameter>
<asp:Parameter Name="artist_band" Type="String"></asp:Parameter>
<asp:Parameter Name="artist_type" Type="String"></asp:Parameter>
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="artist_FirstName"></asp:Parameter>
<asp:Parameter Name="artist_LastName"></asp:Parameter>
<asp:Parameter Name="artist_band"></asp:Parameter>
<asp:Parameter Name="artist_type"></asp:Parameter>
<asp:Parameter Name="original_artist_FirstName"></asp:Parameter>
<asp:Parameter Name="original_artist_LastName"></asp:Parameter>
<asp:Parameter Name="original_artist_band"></asp:Parameter>
<asp:Parameter Name="original_artist_type"></asp:Parameter>
</UpdateParameters>
</asp:SqlDataSource>

以下是我要更新的存储过程:

create proc sp_UpdateArtistInfo
(
@artist_FirstName varchar(50),
@artist_LastName    varchar(50),
@artist_band    varchar(50),
@artist_type    varchar(50),
@original_artist_FirstName  varchar(50),
@original_artist_LastName   varchar(50),
@original_artist_band   varchar(50),
@original_artist_type   varchar(50)
)
as
begin
--start error checking
begin try
update ArtistInfo
set 
artist_FirstName = @artist_FirstName,
artist_LastName = @artist_LastName,
artist_band = @artist_band,
artist_type = @artist_type
WHERE   artist_FirstName = @original_artist_FirstName
AND artist_LastName = @original_artist_LastName
AND artist_band = @original_artist_band
AND artist_type = @original_artist_type
--display the change
end try
begin catch
print error_message()
end catch
end
go

用于删除:

create proc sp_DeleteArtistInfo
(
@artist_FirstName varchar(50),
@artist_LastName    varchar(50),
@artist_band    varchar(50),
@artist_type    varchar(50)
)
as
begin
--start error checking
begin try
DELETE FROM DiskHasArtist
FROM    DiskHasArtist INNER JOIN
ArtistInfo ON DiskHasArtist.artist_ID = ArtistInfo.artist_ID
WHERE   ArtistInfo.artist_FirstName = @artist_FirstName
AND ArtistInfo.artist_LastName = @artist_LastName
AND ArtistInfo.artist_band = @artist_band
AND ArtistInfo.artist_type = @artist_type
delete from ArtistInfo
WHERE   artist_FirstName = @artist_FirstName
AND artist_LastName = @artist_LastName
AND artist_band = @artist_band
AND artist_type = @artist_type
end try
begin catch
print error_message()
end catch
end
go

我发现了这个问题。我没有包含属性"OldValuesParameterFormatString",所以应用程序知道要传递我的"original_"参数。

这是新代码:

<asp:SqlDataSource 
ID="gridView_Artists" 
runat="server" 
ConnectionString="<%$ ConnectionStrings:disk_inventoryConnectionString %>"
SelectCommand="SELECT artist_FirstName,
artist_LastName,
artist_band,
artist_type
FROM ArtistInfo
ORDER BY artist_LastName"
DeleteCommand="sp_DeleteArtistInfo"
DeleteCommandType="StoredProcedure"
UpdateCommand="sp_UpdateArtistInfo"
UpdateCommandType="StoredProcedure"
OldValuesParameterFormatString="original_{0}"
ConflictDetection="CompareAllValues">
<DeleteParameters>
<asp:Parameter Name="original_artist_FirstName" Type="String"></asp:Parameter>
<asp:Parameter Name="original_artist_LastName" Type="String"></asp:Parameter>
<asp:Parameter Name="original_artist_band" Type="String"></asp:Parameter>
<asp:Parameter Name="original_artist_type" Type="String"></asp:Parameter>
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="artist_FirstName"></asp:Parameter>
<asp:Parameter Name="artist_LastName"></asp:Parameter>
<asp:Parameter Name="artist_band"></asp:Parameter>
<asp:Parameter Name="artist_type"></asp:Parameter>
<asp:Parameter Name="original_artist_FirstName"></asp:Parameter>
<asp:Parameter Name="original_artist_LastName"></asp:Parameter>
<asp:Parameter Name="original_artist_band"></asp:Parameter>
<asp:Parameter Name="original_artist_type"></asp:Parameter>
</UpdateParameters>
</asp:SqlDataSource>

OldValuesParameterFormatString="original_{0}">部分告诉应用程序使用参数。

最新更新