Why am I getting null object reference error when saving (OnItemUpdating event) the first edit item
Posted
by craigmoliver
on Stack Overflow
See other posts from Stack Overflow
or by craigmoliver
Published on 2009-01-05T20:58:03Z
Indexed on
2010/04/03
23:23 UTC
Read the original article
Hit count: 404
I'm getting the error "Object reference not set to an instance of an object." when trying to reference a HiddenField (lvEditProjectSteps_hdnStepStatusId for future reference) from the EditItem during the OnItemUpdating event after the Update event fires in a ListView. This only occurs on the FIRST item in the ListView. I checked the source and the HTML is being rendered properly.
ANY insight is appreciated! Thanks in advance...
Source error:
var lvEditProjectSteps_hdnStepStatusId = (HiddenField) lvEditProjectSteps.EditItem.FindControl("lvEditProjectSteps_hdnStepStatusId");
Here's the aspx side of the ListView:
<asp:ListView ID="lvEditProjectSteps" runat="server"
OnItemDataBound="lvEditProjectSteps_OnItemDataBound"
OnItemUpdating="lvEditProjectSteps_OnItemUpdating"
DataSourceID="odsEditProjectStep"
DataKeyNames="Id">
<LayoutTemplate>
<table class="standard-box-style" style="width:800px">
<thead>
<tr>
<th> </th>
<th> </th>
<th>Created</th>
<th>Updated</th>
</tr>
</thead>
<tbody>
<asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
</tbody>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td style="width:50px"<%# (Container.DisplayIndex % 2 == 0)?"":" class=\"row-alternating\"" %>>
<asp:ImageButton ID="lvEditProjectSteps_btnEdit" runat="server"
ImageUrl="~/admin/images/icons/edit.gif"
AlternateText="Edit"
SkinID="interfaceButton"
CommandName="Edit" />
<asp:HiddenField ID="lvEditProjectSteps_hdnId" runat="server" Value='<%# Bind("Id")%>' />
<asp:HiddenField ID="lvEditProjectSteps_hdnStepStatusId" runat="server" Value='<%# Bind("StepStatusId")%>' />
<asp:HiddenField ID="lvEditProjectSteps_hdnStepStatusStepId" runat="server" Value='<%# Bind("StepStatus_StepId")%>' />
</td>
<td style="width:30px"<%# (Container.DisplayIndex % 2 == 0)?"":" class=\"row-alternating\"" %>><asp:Image ID="imgStatus" runat="server" /></td>
<td style="width:75px"<%# (Container.DisplayIndex % 2 == 0)?"":" class=\"row-alternating\"" %>><asp:Literal ID="litTsCreated" runat="server" /></td>
<td style="width:75px"<%# (Container.DisplayIndex % 2 == 0)?"":" class=\"row-alternating\"" %>><asp:Literal ID="litTsUpdated" runat="server" /></td>
</tr>
</ItemTemplate>
<EditItemTemplate>
<tr>
<td style="width:50px"<%# (Container.DisplayIndex % 2 == 0)?"":" class=\"row-alternating\"" %>>
<asp:ImageButton ID="lvEditProjectSteps_btnUpdate" runat="server"
ImageUrl="~/admin/images/icons/save.png"
AlternateText="Save"
SkinID="interfaceButton"
CommandName="Update"
ValidationGroup="EditProjectStepsSave" />
<asp:ImageButton ID="lvEditProjectSteps_btnCancel" runat="server"
ImageUrl="~/admin/images/icons/cancel.png"
AlternateText="Cancel"
SkinID="interfaceButton"
CommandName="Cancel" />
<asp:HiddenField ID="lvEditProjectSteps_hdnId" runat="server" Value='<%# Bind("Id")%>' />
<asp:HiddenField ID="lvEditProjectSteps_hdnStepStatusId" runat="server" Value='<%# Bind("StepStatusId")%>' />
<asp:HiddenField ID="lvEditProjectSteps_hdnStepStatusStepId" runat="server" Value='<%# Bind("StepStatus_StepId")%>' />
</td>
<td style="width:180px" colspan="3"<%# (Container.DisplayIndex % 2 == 0)?"":" class=\"row-alternating\"" %>>
<div><strong>Status</strong></div>
<div class="radiobuttonlist-status">
<asp:RadioButtonList ID="lvEditProjectSteps_rblStatus" runat="server"
RepeatDirection="Horizontal"
AutoPostBack="true"
OnSelectedIndexChanged="lvEditProjectSteps_rblStatus_OnSelectedIndexChanged">
<asp:ListItem Value="1"><img src="/images/icon/project-status/1.png" alt="Error" /></asp:ListItem>
<asp:ListItem Value="2"><img src="/images/icon/project-status/2.png" alt="In Progress" /></asp:ListItem>
<asp:ListItem Value="3"><img src="/images/icon/project-status/3.png" alt="Complete" /></asp:ListItem>
</asp:RadioButtonList>
<asp:RequiredFieldValidator ID="valRequired_lvEditProjectSteps_rblStatus" runat="server"
ControlToValidate="lvEditProjectSteps_rblStatus"
SetFocusOnError="true"
Display="Dynamic"
ErrorMessage="<br />^ required ^"
ValidationGroup="EditProjectStepsSave" />
</div>
</td>
</tr>
</EditItemTemplate>
</asp:ListView>
And the code-behind:
protected void lvEditProjectSteps_OnItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
var info = (ProjectStepInfo)DataBinder.GetDataItem(e.Item);
// View Item
var litTsCreated = (Literal)e.Item.FindControl("litTsCreated");
var litTsUpdated = (Literal)e.Item.FindControl("litTsUpdated");
var imgStatus = (Image) e.Item.FindControl("imgStatus");
if (litTsCreated != null) litTsCreated.Text = String.Format("{0:d}", info.TsCreated);
if (litTsUpdated != null) litTsUpdated.Text = String.Format("{0:d}", info.TsCreated);
if (imgStatus != null) imgStatus.ImageUrl = String.Format("/images/icon/project-status/{0}.png", info.StepStatus_StatusId);
// Edit Item
var lvEditProjectSteps_rblStatus = (RadioButtonList) e.Item.FindControl("lvEditProjectSteps_rblStatus");
if (lvEditProjectSteps_rblStatus != null) lvEditProjectSteps_rblStatus.SelectedValue = info.StepStatus_StatusId.ToString();
}
}
protected void lvEditProjectSteps_OnItemUpdating(object sender, ListViewUpdateEventArgs e)
{
if (IsValid)
{
var oController = new Controller();
var lvEditProjectSteps_hdnStepStatusId = (HiddenField) lvEditProjectSteps.EditItem.FindControl("lvEditProjectSteps_hdnStepStatusId");
var lvEditProjectSteps_hdnStepStatusStepId = (HiddenField) lvEditProjectSteps.EditItem.FindControl("lvEditProjectSteps_hdnStepStatusStepId");
var lvEditProjectSteps_rblStatus = (RadioButtonList) lvEditProjectSteps.EditItem.FindControl("lvEditProjectSteps_rblStatus");
var infoStepStatus = oController.StepStatus_SelectOne_StepId_StatusId(Convert.ToInt32(lvEditProjectSteps_hdnStepStatusStepId.Value), Convert.ToInt32(lvEditProjectSteps_rblStatus.SelectedValue));
if (lvEditProjectSteps_hdnStepStatusId != null)
{
e.NewValues["ProjectId"] = Convert.ToInt32(lvEditProjectSteps_hdnProjectId.Value);
e.NewValues["StepStatusId"] = infoStepStatus.Id;
}
else
{
Response.Write("cancel");
e.Cancel = true;
}
}
else
{
Response.Write("cancel, not valid");
e.Cancel = true;
}
}
protected void lvEditProjectSteps_rblStatus_OnSelectedIndexChanged(object sender, EventArgs e)
{
var oController = new Controller();
var rbl = (RadioButtonList)sender;
var lvEditProjectSteps_txtText = (TextBox) rbl.NamingContainer.FindControl("lvEditProjectSteps_txtText");
var lvEditProjectSteps_txtComment = (TextBox)rbl.NamingContainer.FindControl("lvEditProjectSteps_txtComment");
var lvEditProjectSteps_hdnStepStatusStepId = (HiddenField) rbl.NamingContainer.FindControl("lvEditProjectSteps_hdnStepStatusStepId");
if (!String.IsNullOrEmpty(lvEditProjectSteps_hdnStepStatusStepId.Value) && lvEditProjectSteps_txtText != null && lvEditProjectSteps_txtComment != null)
{
var infoStep = oController.Step_SelectOne(Convert.ToInt32(lvEditProjectSteps_hdnStepStatusStepId.Value));
var infoStepStatus = oController.StepStatus_SelectOne_StepId_StatusId(Convert.ToInt32(lvEditProjectSteps_hdnStepStatusStepId.Value), Convert.ToInt32(rbl.SelectedValue));
lvEditProjectSteps_txtText.Text = infoStep.Name;
lvEditProjectSteps_txtComment.Text = infoStepStatus.Text;
}
}
© Stack Overflow or respective owner