Note that there are some explanatory texts on larger screens.

plurals
  1. POADO.net Entity Gridview is null when RowUpdating event fired
    text
    copied!<p>So I'm using ADO.net Entity Data model in an ASP.Net (C#) Web page. I am dynamically adding and retrieving data to my database using gridviews. I am using master pages, and my gridview is in a contentplaceholder. My only issue with this code is that when my RowUpdating event fires, the gridview is null. I can call by BindGV function, and then the rest of the code updates the database perfectly fine, with the original data from the database I just bound to it, since the database was not updated yet. In all events, if I change bindGV() to Gridview1.databind(), the gridview is null. I think the datasource the gridview is referencing is becoming null at the end of the event when the data connection is closed, is there anyway to prevent this? </p> <pre><code>&lt;asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" onrowcancelingedit="GridView1_RowCancelingEdit" onrowediting="GridView1_RowEditing" onrowupdating="GridView1_RowUpdating" onrowdatabound="GridView1_RowDataBound" &gt; &lt;Columns&gt; &lt;asp:TemplateField Visible="false"&gt; &lt;ItemTemplate&gt; &lt;asp:Label ID="lblId" runat="server" Text='&lt;%# Eval("id") %&gt;'&gt;&lt;/asp:Label&gt; &lt;/ItemTemplate&gt; &lt;EditItemTemplate&gt; &lt;asp:Label ID="lblId" runat="server" Text='&lt;%# Eval("id") %&gt;'&gt;&lt;/asp:Label&gt; &lt;/EditItemTemplate&gt; &lt;/asp:TemplateField&gt; &lt;asp:TemplateField HeaderText="Machine"&gt; &lt;ItemTemplate&gt; &lt;asp:Label ID="lblMachine" runat="server" Text='&lt;%# Eval("MachineName") %&gt;'&gt;&lt;/asp:Label&gt; &lt;/ItemTemplate&gt; &lt;EditItemTemplate&gt; &lt;asp:TextBox ID="txtMachine" runat="server" Text='&lt;%# Eval("MachineName") %&gt;'&gt;&lt;/asp:TextBox&gt; &lt;/EditItemTemplate&gt; &lt;ControlStyle Width="60px" /&gt; &lt;/asp:TemplateField&gt; &lt;asp:TemplateField HeaderText="Dept"&gt; &lt;ItemTemplate&gt; &lt;asp:Label ID="lblDept" runat="server" Text='&lt;%# Eval("WorkCenterFK") %&gt;'&gt;&lt;/asp:Label&gt; &lt;/ItemTemplate&gt; &lt;EditItemTemplate&gt; &lt;asp:DropDownList ID="ddldept" runat="server" &gt; &lt;/asp:DropDownList&gt; &lt;/EditItemTemplate&gt; &lt;ControlStyle Width="120px" /&gt; &lt;/asp:TemplateField&gt; &lt;asp:CommandField HeaderText="Actions" ShowEditButton="true" ShowDeleteButton="True" ControlStyle-Width="50px" CausesValidation="false"&gt; &lt;/asp:CommandField&gt; &lt;/Columns&gt; </code></pre> <p></p> <pre><code>protected void BindGV() { QualityEntities database = new QualityEntities(); GridView1.DataSource = (from m in database.Machines from d in database.Workcenters where m.WorkcenterFK == d.id select new { id = m.id, MachineName = m.MachineName, WorkCenterFK = d.WorkCenterName }); ; GridView1.DataBind(); } protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) BindGV(); } protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) { GridView1.EditIndex = e.NewEditIndex; BindGV(); } protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { GridView1.EditIndex = -1; BindGV(); } protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { QualityEntities database = new QualityEntities(); BindGV(); Int32 id = Convert.ToInt32(((Label)GridView1.Rows[e.RowIndex].FindControl("lblId")).Text); DropDownList ddl = ((DropDownList)GridView1.Rows[e.RowIndex].FindControl("ddlDept")); TextBox txt = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("txtMachine")); Machine mch = (from m in database.Machines where m.id == id select m).Single(); mch.MachineName = txt.Text; mch.WorkcenterFK = Convert.ToInt32(ddl.SelectedItem.Value); database.SaveChanges(); GridView1.EditIndex = -1; BindGV(); } protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { QualityEntities database = new QualityEntities(); DropDownList temp = (DropDownList)(e.Row.FindControl("ddlDept")); if (temp != null) { temp.DataSource = (from w in database.Workcenters select w); temp.DataTextField = "WorkCenterName"; temp.DataValueField = "id"; temp.DataBind(); Int32 id = Convert.ToInt32(((Label)e.Row.FindControl("lblId")).Text); } } </code></pre>
 

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