我有一个gridview可以根据需要正确提取数据。我将其设置为自定义查询,因为我正在使用存储过程来更新和删除信息。我正在运行删除命令和更新命令,但只有删除命令有效。
我的更新命令似乎设置正确,但是当我更改其中一项的名称并单击“更新”时,网格将返回到之前的位置,而没有更改。我也没有收到错误消息,所以我不确定如何解决此问题。我搜寻了所有试图找到答案的网,但是似乎没有一种方法可以解决这种情况。 “原始”参数是否可能引起问题?我希望网格将旧值用作表中的检查。如果这是导致问题的原因,还有另一种解决方法?
谢谢!
这是我的gridview代码:
<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
答案 0 :(得分:0)
我发现了问题。我没有包含属性“ 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}” 部分告诉应用程序使用参数。