Note that there are some explanatory texts on larger screens.

plurals
  1. POGridView DataItem not persisting between mode changes
    primarykey
    data
    text
    <p>im having some wierd issue with my GridView. Basically, im trying to run a delete command on a table. The gridview has 3 fields bound to it, ItemId, ItemSummary, and ItemDate.</p> <p>Now as i recall, during a mode change (say, between Select and Edit) these fields are automatically passed using the syntax @+FieldName (ie. ItemId is passed as @ItemId).</p> <p>So keeping this in mind i tried the delete statement, but it gave an error saying the parameter was not passed. So i tried the other route, to extract the ItemId programmatically and insert it as a parameter at runtime.</p> <p>I tried reading from the DataItem bound to to the control, but it kept returning null.</p> <p>After some more debugging, i found that when the data was initially bound to the control, it correctly created a DataItem, but as soon as the mode was changed the DataItem is now null.</p> <p>I have been trying to fix this for ages and it just wont work. Here is my code:</p> <pre><code>&lt;asp:DetailsView FieldHeaderStyle-CssClass="bold" CssClass="marginLeftRightBottom10px center" AutoGenerateDeleteButton="true" AutoGenerateEditButton="true" GridLines="Both" ID="dvIndividualUpdate" AutoGenerateInsertButton="true" runat="server" AutoGenerateRows="False" DataSourceID="sqldsSingleUpdate" OnDataBound="dvIndividualUpdate_DataBound"&gt; &lt;Fields&gt; &lt;asp:TemplateField&gt; &lt;HeaderTemplate&gt; Update Id: &lt;/HeaderTemplate&gt; &lt;ItemTemplate&gt; &lt;asp:Label Text='&lt;%# Eval("updateId") %&gt;' ID="lblUpdateId" runat="server"&gt;&lt;/asp:Label&gt; &lt;/ItemTemplate&gt; &lt;InsertItemTemplate&gt; &lt;asp:Label Text='Auto Generated' ID="lblUpdateIdInsert" runat="server"&gt;&lt;/asp:Label&gt; &lt;/InsertItemTemplate&gt; &lt;EditItemTemplate&gt; &lt;asp:Label Text='Auto Generated' ID="lblUpdateIdEdit" runat="server"&gt;&lt;/asp:Label&gt; &lt;/EditItemTemplate&gt; &lt;/asp:TemplateField&gt; &lt;asp:TemplateField&gt; &lt;HeaderTemplate&gt; Update Summary: &lt;/HeaderTemplate&gt; &lt;ItemTemplate&gt; &lt;asp:Label Text='&lt;%# Eval("updateSummary") %&gt;' ID="lblUpdateSummary" runat="server"&gt;&lt;/asp:Label&gt; &lt;/ItemTemplate&gt; &lt;InsertItemTemplate&gt; &lt;asp:TextBox CssClass="tbUpdateSummaryInsert" TextMode="MultiLine" Text='&lt;%# Bind("updateSummary") %&gt;' ID="tbUpdateSummary" runat="server"&gt;&lt;/asp:TextBox&gt; &lt;/InsertItemTemplate&gt; &lt;EditItemTemplate&gt; &lt;asp:TextBox CssClass="tbUpdateSummaryEdit" TextMode="MultiLine" Text='&lt;%# Bind("updateSummary") %&gt;' ID="tbUpdateSummary" runat="server"&gt;&lt;/asp:TextBox&gt; &lt;/EditItemTemplate&gt; &lt;/asp:TemplateField&gt; &lt;asp:TemplateField&gt; &lt;HeaderTemplate&gt; Update Date: &lt;/HeaderTemplate&gt; &lt;ItemTemplate&gt; &lt;asp:Label Text='&lt;%# Eval("dateOfUpdate") %&gt;' ID="lblDateOfUpdateInsert" runat="server"&gt;&lt;/asp:Label&gt; &lt;/ItemTemplate&gt; &lt;InsertItemTemplate&gt; &lt;asp:Label Text='' ID="lblEditDateOfUpdate" runat="server"&gt;&lt;/asp:Label&gt; &lt;/InsertItemTemplate&gt; &lt;EditItemTemplate&gt; &lt;asp:Label Text='&lt;%# Eval("dateOfUpdate") %&gt;' ID="lblDateOfUpdateEdit" runat="server"&gt;&lt;/asp:Label&gt; &lt;/EditItemTemplate&gt; &lt;/asp:TemplateField&gt; &lt;/Fields&gt; &lt;/asp:DetailsView&gt; &lt;asp:Label ID="lblUpdateErrors" runat="server" Text="" CssClass="block colorRed marginBottom10px center"&gt;&lt;/asp:Label&gt; &lt;asp:SqlDataSource DataSourceMode="DataSet" ID="sqldsSingleUpdate" runat="server" ConnectionString="&lt;%$ ConnectionStrings:myDbConnection%&gt;" SelectCommandType="StoredProcedure" SelectCommand="dbo.getUpdate" InsertCommand="dbo.createUpdate" InsertCommandType="StoredProcedure" OnInserted="sqldsSingleUpdate_Inserted" DeleteCommand="dbo.deleteUpdate" DeleteCommandType="StoredProcedure" OnDeleted="sqldsSingleUpdate_Deleted" OnDeleting="sqldsSingleUpdate_Deleting"&gt; &lt;DeleteParameters&gt; &lt;asp:Parameter Name="updateID" /&gt; &lt;/DeleteParameters&gt; &lt;SelectParameters&gt; &lt;asp:ControlParameter Name="updateId" ControlID="gvUpdates" PropertyName="SelectedDataKey.Value" /&gt; &lt;/SelectParameters&gt; &lt;InsertParameters&gt; &lt;asp:ControlParameter DbType="Date" ControlID="dvIndividualUpdate$lblEditDateOfUpdate" Name="dateOfUpdate" PropertyName="Text" /&gt; &lt;/InsertParameters&gt; &lt;/asp:SqlDataSource&gt; </code></pre> <p>And my related codebehind:</p> <pre><code>protected void dvIndividualUpdate_DataBound(object sender, EventArgs e) { if (dvIndividualUpdate.CurrentMode == DetailsViewMode.Insert) { Label lbl = dvIndividualUpdate.FindControl("lblEditDateOfUpdate") as Label; lbl.Text = DateTime.Today.ToString("dd-MM-yyyy"); } } protected void sqldsSingleUpdate_Inserted(object sender, SqlDataSourceStatusEventArgs e) { if (e.Exception != null) { Exception ex = e.Exception; lblUpdateErrors.Text = "There was a problem creating the update."; ErrorSignal.FromCurrentContext().Raise(ex); e.ExceptionHandled = true; return; } else { lblUpdateErrors.Text = "Update created successfully."; gvUpdates.DataBind(); } } protected void sqldsSingleUpdate_Deleted(object sender, SqlDataSourceStatusEventArgs e) { if (e.Exception != null) { Exception ex = e.Exception; lblUpdateErrors.Text = "There was a problem deleting the update."; ErrorSignal.FromCurrentContext().Raise(ex); e.ExceptionHandled = true; return; } else { lblUpdateErrors.Text = "Update deleted successfully."; gvUpdates.DataBind(); } } </code></pre> <p>Thanks a lot</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.
    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