我有2个Gridview,其中一个是可更新的,而不是。我正在使用内置的更新功能。当您更新一行时,sql将数据移动到第二个Gridview,其中编辑选项不可用。
我的问题是,如果单击“编辑”,然后单击“更新而不实际更改文本框值”,它将使用相同的数据更新sql,并且该行将移至另一个Gridview。此时用户无法在24小时内更改该值。
我该如何解决这个问题?
感谢
麦克
答案 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>