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

时间:2016-11-13 20:35:11

标签: c# sql asp.net gridview

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

我的问题是,如果单击“编辑”,然后单击“更新而不实际更改文本框值”,它将使用相同的数据更新sql,并且该行将移至另一个Gridview。此时用户无法在24小时内更改该值。

我该如何解决这个问题?

感谢

麦克

1 个答案:

答案 0 :(得分:0)

好的,这是正在发生的事情。我以为GridView正在进行更新。我不知道为什么我认为GridView与它有任何关系。 GridView仅将值推送到实际执行更新的数据源。

因此,当您查看DataSource的标记时,它正在运行我已设置的UPDATE语句。 UPDATE就是这样,一个更新。数据是否相同无关紧要。

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

这是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>