Note that there are some explanatory texts on larger screens.

plurals
  1. POOldValues collection in event "ItemUpdating" of DetailsView is always empty
    primarykey
    data
    text
    <p>I´m using a DetailsView but when updating, I cannot get the OldValues because the DetailsViewUpdateEventArgs.OldValues of ItemUpdating event is always empty. The NewValues has the values ok.</p> <p>Note: I´m not using a datasource component in my application (SqlDataSource, ObjectDataSource, EntityDataSource, etc.). In this case should I do something manually?</p> <p>Any ideas will be welcome!</p> <p>Thanks!</p> <h1>Complementing the information:</h1> <p>I´m using ASP.NET 4.0 (WebForms)</p> <p>A snippet of code that I believe to be relevant below:</p> <pre><code>&lt;asp:DetailsView ID="customerDetails" runat="server" AutoGenerateRows="False" EmptyDataText="No data..." meta:resourcekey="customerDetails" onitemdeleting="customerDetails_ItemDeleting" oniteminserting="customerDetails_ItemInserting" onitemupdating="customerDetails_ItemUpdating" onmodechanging="customerDetails_ModeChanging" CssClass="customerDetails" DataKeyNames="CustomerID"&gt; &lt;FooterTemplate&gt; &lt;asp:LinkButton ID="lnkNew" Text="New" ToolTip="New Customer" CommandName="New" meta:resourcekey="lnkNew" runat="server" /&gt; &lt;/FooterTemplate&gt; &lt;EmptyDataTemplate&gt; &lt;p&gt;&lt;asp:Label ID="lblNoDataHasBeenFound" Text="No data has been found." meta:resourcekey="lblNoDataHasBeenFound" runat="server" /&gt;&lt;/p&gt; &lt;asp:LinkButton ID="lnkNew" Text="New" ToolTip="New Customer" CommandName="New" meta:resourcekey="lnkNew" runat="server" /&gt; &lt;/EmptyDataTemplate&gt; &lt;Fields&gt; &lt;%--CustomerID--%&gt; &lt;asp:TemplateField HeaderStyle-CssClass="detailsHeader" ItemStyle-CssClass="detailsField"&gt; &lt;HeaderTemplate&gt; &lt;asp:Label ID="ltrCustomerIdLabel" meta:resourcekey="ltrCustomerId" Text="CustomerID:" runat="server" /&gt; &lt;/HeaderTemplate&gt; &lt;ItemTemplate&gt; &lt;asp:Label ID="lblCustomerId" Text='&lt;%# Eval("CustomerID") %&gt;' runat="server" /&gt; &lt;/ItemTemplate&gt; &lt;EditItemTemplate&gt; &lt;asp:Label ID="lblCustomerId" Text='&lt;%# Eval("CustomerID") %&gt;' runat="server" /&gt; &lt;/EditItemTemplate&gt; &lt;InsertItemTemplate&gt; &lt;asp:TextBox ID="txtCustomerId" Text='&lt;%# Bind("CustomerID") %&gt;' MaxLength="5" width="50px" runat="server" /&gt; &lt;cc1:DataAnnotationsValidator ID="CustomerIdValidator" Type="String" runat="server" ControlToValidate="txtCustomerId" PropertyName="CustomerID" Text="*" SourceType="DataLayerPOCO.Customer, DataLayerPOCO" CssError="validationError" Display="None"/&gt; &lt;/InsertItemTemplate&gt; &lt;HeaderStyle HorizontalAlign="Right" /&gt; &lt;ItemStyle HorizontalAlign="Left" /&gt; &lt;/asp:TemplateField&gt; &lt;%--CompanyName--%&gt; &lt;asp:TemplateField HeaderStyle-CssClass="detailsHeader" ItemStyle-CssClass="detailsField"&gt; &lt;HeaderTemplate&gt; &lt;asp:Literal ID="ltrCompanyNameLabel" meta:resourcekey="ltrCompanyName" Text="Company Name:" runat="server" /&gt; &lt;/HeaderTemplate&gt; &lt;ItemTemplate&gt; &lt;asp:Literal ID="ltrCompanyName" Text='&lt;%# Eval("CompanyName") %&gt;' runat="server"/&gt; &lt;/ItemTemplate&gt; &lt;EditItemTemplate&gt; &lt;asp:TextBox ID="txtCompanyName" Text='&lt;%# Bind("CompanyName") %&gt;' MaxLength="40" Width="310px" runat="server" /&gt; &lt;cc1:DataAnnotationsValidator ID="CompanyNameValidator" Type="String" runat="server" ControlToValidate="txtCompanyName" PropertyName="CompanyName" Text="*" SourceType="DataLayerPOCO.Customer, DataLayerPOCO" CssError="validationError" Display="None"/&gt; &lt;/EditItemTemplate&gt; &lt;InsertItemTemplate&gt; &lt;asp:TextBox ID="txtCompanyName" Text='&lt;%# Bind("CompanyName") %&gt;' MaxLength="40" Width="310px" runat="server" /&gt; &lt;cc1:DataAnnotationsValidator ID="CompanyNameValidator" Type="String" runat="server" ControlToValidate="txtCompanyName" PropertyName="CompanyName" Text="*" SourceType="DataLayerPOCO.Customer, DataLayerPOCO" CssError="validationError" Display="None"/&gt; &lt;/InsertItemTemplate&gt; &lt;HeaderStyle HorizontalAlign="Right" /&gt; &lt;/asp:TemplateField&gt; ... ... other fields goes here ... ... &lt;%--Edit/Insert--%&gt; &lt;asp:TemplateField HeaderStyle-CssClass="detailsHeader" ItemStyle-CssClass="detailsField"&gt; &lt;ItemTemplate&gt; &lt;asp:ImageButton ID="imgEdit" ImageUrl="~/img/pencil.png" meta:resourcekey="imgEdit" AlternateText="Edit" ToolTip="Edit Customer" CommandName="Edit" runat="server" CausesValidation="false"/&gt; &lt;asp:ImageButton ID="imgDelete" ImageUrl="~/img/delete.png" meta:resourcekey="imgDelete" AlternateText="Delete" ToolTip="Delete Customer" CommandName="Delete" OnClientClick="return confirmDelete();" runat="server" CausesValidation="false"/&gt; &lt;/ItemTemplate&gt; &lt;EditItemTemplate&gt; &lt;asp:ImageButton ID="imgUpdate" ImageUrl="~/img/accept.png" meta:resourcekey="imgUpdate" AlternateText="Update" ToolTip="Update Customer" CommandName="Update" runat="server" /&gt; &lt;asp:ImageButton ID="imgCancel" ImageUrl="~/img/cancel.png" meta:resourcekey="imgCancel" AlternateText="Cancel" ToolTip="Cancel Edit" CommandName="Cancel" runat="server" CausesValidation="false"/&gt; &lt;/EditItemTemplate&gt; &lt;InsertItemTemplate&gt; &lt;asp:ImageButton ID="imgSave" ImageUrl="~/img/disk.png" meta:resourcekey="imgSave" AlternateText="Save" ToolTip="Save Customer Data" CommandName="Insert" runat="server" CausesValidation="true"/&gt; &lt;asp:ImageButton ID="imgCancelInsert" ImageUrl="~/img/cancel.png" meta:resourcekey="imgCancelInsert" AlternateText="Cancel" ToolTip="Cancel Insert" CommandName="Cancel" runat="server" CausesValidation="false"/&gt; &lt;/InsertItemTemplate&gt; &lt;/asp:TemplateField&gt; &lt;Fields&gt; &lt;/asp:DetailsView&gt; </code></pre> <p>The event ItemUpdating is like below:</p> <pre><code> protected void customerDetails_ItemUpdating(object sender, DetailsViewUpdateEventArgs e) { repository = repository ?? new NorthwindRepositoryEF(); string id = e.Keys["CustomerID"] as string; DataLayerPOCO.Customer customer = repository.GetCustomer(id); string companyName = (string)e.NewValues["CompanyName"]; string contactName = (string)e.NewValues["ContactName"]; string contactTitle = (string)e.NewValues["ContactTitle"]; string address = (string)e.NewValues["Address"]; string city = (string)e.NewValues["City"]; string region = (string)e.NewValues["Region"]; string postalCode = (string)e.NewValues["PostalCode"]; string country = (string)e.NewValues["Country"]; string phone = (string)e.NewValues["Phone"]; string fax = (string)e.NewValues["Fax"]; // Update Customer with the new data customer.CompanyName = companyName; customer.ContactName = contactName; customer.ContactTitle = contactTitle; customer.Address = address; customer.City = city; customer.Region = region; customer.PostalCode = postalCode; customer.Country = country; customer.Phone = phone; customer.Fax = fax; repository.UpdateCustomer(customer); repository.Save(); //--- customerDetails.ChangeMode(DetailsViewMode.ReadOnly); BindCustomerDetails(); BindCustomersList(); } </code></pre> <p>The problem is that if I want to handle the old values, I can´t:</p> <p>this, evaluates to 0: int oldValuesCount = e.OldValues.Count;</p> <p>and this, evaluates to null, even if I alter the value to a new one: string companyNameOld = e.OldValues["CompanyName"] as string;</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload