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

时间:2018-11-26 05:18:58

标签: c# asp.net gridview visual-studio-2017

我有一个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

1 个答案:

答案 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}” 部分告诉应用程序使用参数。