如何防止GridView从更新,如果值没有改变

本文关键字:改变 如果 何防止 GridView 更新 | 更新日期: 2023-09-27 18:17:47

我有2个Gridview的,其中一个是可更新的一个不是。我正在使用内置的更新功能。当您更新一行时,sql将数据移动到第二个Gridview,其中编辑选项不可用。

我的问题是,如果你点击编辑,然后点击更新没有实际改变文本框值,它更新sql与相同的数据和行移动到另一个Gridview。此时用户在24小时内无法更改该值。

我该如何解决这个问题?

感谢迈克

如何防止GridView从更新,如果值没有改变

好了,事情是这样的。我认为是GridView在做更新。我不知道为什么我认为GridView和它有关系。GridView只将值推送到实际执行更新的数据源。

因此,当您查看数据源的标记时,它正在运行我设置的UPDATE语句。更新只是一个更新。数据是否相同并不重要。

因此,我只是修改了我的UPDATE语句,使其包含一个IF,以查看名称字段是否相同。当你点击GridView上的"update"时,是的,它仍然运行update语句,但是如果没有更改,该语句不会更新任何新数据。

这是SQLDataSource的标记,您将看到其中的sql语句。这就是我要修改的

<asp:SqlDataSource 
        ID="SqlDataSource1" 
        runat="server" 
        ConnectionString="constring" 

        DeleteCommand="DELETE FROM [RegisteredVisitors] WHERE [PK] = @PK" 
        InsertCommand="INSERT INTO [RegisteredVisitors] ([ResidentName], [ResidentAddress], [VisitorNumber], [VisitorName]) VALUES (@ResidentName, @ResidentAddress, @VisitorNumber, @VisitorName)" 
        SelectCommand="SELECT * FROM [RegisteredVisitors] WHERE ([ResidentName] = @ResidentName AND [Date] <  (SELECT DateAdd(SECOND, -86400, getdate())))" 
        UpdateCommand="IF NOT (SELECT [VisitorName] FROM [RegisteredVisitors] WHERE [PK] = @PK) = @VisitorName BEGIN DECLARE @i INT =  (SELECT ISNULL(MAX([VisitorNumber]),0) + 1 FROM [RegisteredVisitors]) UPDATE [RegisteredVisitors] SET [VisitorName] = @VisitorName, [Date] = GETDATE() WHERE [PK] = @PK UPDATE RegisteredVisitors SET [VisitorNumber]  = @i , @i = @i WHERE [PK] = @PK END;" OnSelecting="SqlDataSource_Selecting1">

        <DeleteParameters>
            <asp:Parameter Name="PK" Type="Int64" />
        </DeleteParameters>
        <InsertParameters>
            <asp:Parameter Name="ResidentName" Type="String" />
            <asp:Parameter Name="ResidentAddress" Type="String" />
            <asp:Parameter Name="VisitorNumber" Type="Int32" />
            <asp:Parameter Name="VisitorName" Type="String" />
        </InsertParameters>
        <SelectParameters>
            <asp:ControlParameter ControlID="Label1" Name="ResidentName" PropertyName="Text" Type="String" />
        </SelectParameters>
        <UpdateParameters>
            <asp:Parameter Name="ResidentName" Type="String" />
            <asp:Parameter Name="ResidentAddress" Type="String" />
            <asp:Parameter Name="VisitorNumber" Type="Int32" />
            <asp:Parameter Name="VisitorName" Type="String" />
            <asp:Parameter Name="PK" Type="Int64" />
        </UpdateParameters>
    </asp:SqlDataSource>