QuestionableSounder
QuestionableSounder

Reputation: 91

Update Gridview Error - "oldValues is empty"

So I'm trying to update my GridView, and I get this error:

You have specified that your update command compares all values on SqlDataSource 'SqlDataSource1', but the dictionary passed in for oldValues is empty. Pass in a valid dictionary for update or change your mode to OverwriteChanges.

Here is the SQL Data Source in question:

 <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                ConflictDetection="CompareAllValues" 
                ConnectionString="<%$ ConnectionStrings:MyConnectionString %>" 
                OldValuesParameterFormatString="original_{0}" 
                SelectCommand="SELECT field1, field2, field3, field4, field5, field6 
                    FROM table 
                    ORDER BY field4"
                UpdateCommand="UPDATE table2 
                    SET field2 = @field2 , field3 = @field3, field4 = @field4  
                    WHERE (field1 = @original_field1) AND (field6 = @original_field6)"
                FilterExpression="field1 LIKE '{0}'">
                <FilterParameters>
                    <asp:ControlParameter ControlID="SearchBox" Name="field1" Type="String" DefaultValue="" />
                </FilterParameters>
                <SelectParameters>
                     <asp:ControlParameter ControlID="SearchBox" Name="field1" Type="String" DefaultValue="" />  
                </SelectParameters>
                <UpdateParameters>
                    <asp:Parameter Name="field2" Type="String" />
                    <asp:Parameter Name="field3" Type="String" />
                    <asp:Parameter Name="field4" Type="Int32" />
                    <asp:Parameter Name="original_field1" Type="String" />
                    <asp:Parameter Name="original_field5" Type="Int32" />
                    <asp:Parameter Name="original_field2" Type="String" />
                    <asp:Parameter Name="original_field3" Type="String" />
                    <asp:Parameter Name="original_field4" Type="Int32" />
                    <asp:Parameter Name="original_field6" Type="Int32" />
                </UpdateParameters>
 </asp:SqlDataSource>

Now I understand one way to get around this is to change 'CompareAllValues' to 'OverwriteChanges', however I have never needed to do this before (I have other GridViews on the page that update just fine) and it never seems to update the data when I DO try anyway. Is it the nature of the data that would cause this Data Source to act differently to the rest? Or have I done something stupid?

Thanks! :)

Upvotes: 0

Views: 3277

Answers (1)

QuestionableSounder
QuestionableSounder

Reputation: 91

I discovered the answer! The data field 'field6' was not included in my Gridview as a field. Once I added it as a column in the GridView I was able to make it work :) (Can also add it as a DataKeyName)

Upvotes: 1

Related Questions