Как мне заставить эту команду обновления работать в gridview? - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть сетка, которая правильно извлекает данные по мере необходимости.У меня настроены пользовательские запросы, так как я использую хранимые процедуры для обновления и удаления информации.Я выполняю команду удаления и команду обновления, но работает только команда удаления.

Кажется, что моя команда обновления настроена правильно, но когда я изменяю имя одного из элементов и нажимаю кнопку обновить,Сетка возвращается туда, где она была раньше, без изменений.Я также не получаю сообщение об ошибке, поэтому я не уверен, как решить эту проблему.Я обыскивал сеть, пытаясь найти ответ, но ни один из них не подходит для этой ситуации.Возможно ли, что «оригинальные» параметры вызывают проблему?Я хочу, чтобы сетка приняла старое значение в качестве проверки в таблице.Если это вызывает проблему, есть ли другой способ сделать это?

Заранее спасибо!

Вот мой код 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 голосов
/ 26 ноября 2018

Я разобрался в проблеме.Я не включил свойство "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} " part указывает приложению использовать параметры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...