如何防止GridView从更新,如果值没有改变
本文关键字:改变 如果 何防止 GridView 更新 | 更新日期: 2023-09-27 18:17:47
我有2个Gridview的,其中一个是可更新的一个不是。我正在使用内置的更新功能。当您更新一行时,sql将数据移动到第二个Gridview,其中编辑选项不可用。
我的问题是,如果你点击编辑,然后点击更新没有实际改变文本框值,它更新sql与相同的数据和行移动到另一个Gridview。此时用户在24小时内无法更改该值。
我该如何解决这个问题?
感谢迈克好了,事情是这样的。我认为是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>