When press the "+ Add" button, I can enter the fields and when I press save, everything is working fine. When I try to edit the same record with the "Edit" button below it can't find any of the templated controls. (It's a template column here, but the same thing happens when I use GridEditCommandColumn)
This is the ASCX code:
<telerik:RadGrid ID="gridNotes" AutoGenerateColumns="False" Skin="Web20" runat="server"> |
<MasterTableView AutoGenerateColumns="False" AllowAutomaticUpdates="false" AllowAutomaticInserts="false" CommandItemDisplay="Top" DataKeyNames="NoteID" |
TableLayout="Fixed" EditMode="EditForms"> |
<Columns> |
<telerik:GridBoundColumn UniqueName="ID" DataField="NoteID" Display="false"> |
</telerik:GridBoundColumn> |
<telerik:GridDateTimeColumn HeaderText="Date" UniqueName="Date" DataField="Date" |
DataType="System.DateTime" HeaderStyle-Width="170px" EmptyDataText=" "> |
</telerik:GridDateTimeColumn> |
<telerik:GridBoundColumn HeaderText="Owner" UniqueName="Owner" DataField="Author" |
HeaderStyle-Width="180px" ColumnEditorID="ownerEditor"> |
</telerik:GridBoundColumn> |
<telerik:GridBoundColumn HeaderText="Notes" UniqueName="Body" HeaderStyle-Width="250px" DataField="Body"> |
</telerik:GridBoundColumn> |
<telerik:GridTemplateColumn HeaderText="Attachments" UniqueName="Attachments" ItemStyle-Width="250px"> |
<ItemTemplate> |
<table style="border:0px; height:10px;"> |
<tr> |
<td valign="middle"> |
<asp:ImageButton ID="btnAddAttachments" ImageUrl="~/Images/ic_attachments_add.png" runat="server" /> |
</td> |
<td valign="middle" style="width:49%"> |
Add >> |
</td> |
<td valign="middle"> |
<asp:ImageButton ID="btnViewAttachments" ImageUrl="~/Images/ic_attachments_view.png" runat="server" /> |
</td> |
<td valign="middle" style="width:49%"> |
View >> |
</td> |
</tr> |
</table> |
</ItemTemplate> |
</telerik:GridTemplateColumn> |
<telerik:GridTemplateColumn HeaderText="Save" UniqueName="EditCommand" ItemStyle-Width="135px" ItemStyle-HorizontalAlign="Center"> |
<ItemTemplate> |
<asp:Button ID="btnEdit" CssClass="miniButton" Width="60px" Text="Edit" CommandName="Edit" runat="server" /> |
</ItemTemplate> |
</telerik:GridTemplateColumn> |
</Columns> |
<EditFormSettings EditFormType="Template"> |
<FormTemplate> |
<table cellpadding="0" cellspacing="0" width="100%"> |
<tr> |
<td style="width:170px; text-align:center;"> |
<telerik:RadDatePicker ID="dateNote" runat="server"></telerik:RadDatePicker> |
</td> |
<td style="width:180px; text-align:center;"> |
<asp:TextBox ID="txtOwner" Width="170px" Text='<%# Bind("Author") %>' runat="server"></asp:TextBox> |
</td> |
<td style="width:250px; text-align:center;"> |
<asp:TextBox ID="txtBody" TextMode="MultiLine" Height="60px" Width="240px" Text='<%# Bind("Body") %>' Font-Names="Helvetica" runat="server"></asp:TextBox> |
</td> |
<td style="width:250px; text-align:center;"> |
<telerik:RadAsyncUpload ID="attachmentNotes" Width="240px" Skin="Web20" runat="server"></telerik:RadAsyncUpload> |
</td> |
<td style="width:65px; text-align:center;"> |
<asp:Button ID="btnSave" CssClass="miniButton" Width="60px" Text="Save" CommandName="Save" runat="server" /> |
</td> |
<td style="width:70px; text-align:center;"> |
<asp:Button ID="btnCancel" CssClass="miniButton" Width="60px" Text="Cancel" CommandName="Cancel" runat="server" /> |
</td> |
</tr> |
</table> |
</FormTemplate> |
</EditFormSettings> |
</MasterTableView> |
<ClientSettings> |
</ClientSettings> |
</telerik:RadGrid> |
<asp:HiddenField ID="txtNote" runat="server" /> |
This is in the code-behind.
void gridNotes_ItemCommand(object source, GridCommandEventArgs e)
{
switch (e.CommandName)
{
case RadGrid.InitInsertCommandName:
if (gridNotes.EditItems.Count > 0)
gridNotes.MasterTableView.ClearEditItems();
NoteID = 0;
break;
case RadGrid.EditCommandName:
_gridItem = (
GridEditableItem)e.Item;
NoteID =
Convert.ToDouble(_gridItem.GetDataKeyValue("NoteID"));
e.Item.OwnerTableView.IsItemInserted =
false;
break;
case "Save":
e.Item.Edit =
false;
_gridItem = (
GridEditableItem)e.Item;
_presenter.SaveNote();
gridNotes.MasterTableView.ClearEditItems();
break;
case "Cancel":
gridNotes.MasterTableView.ClearEditItems();
break;
default:
gridNotes.MasterTableView.ClearEditItems();
break;
}
}
In the SaveNote() method, the controls are accessed through properties that look like this:
((RadDatePicker)_gridItem.FindControl("dateNote")).SelectedDate;
((TextBox)_gridItem.FindControl("txtOwner")).Text;
etc.
I get "Object reference not set to an instance of an object.", because although _gridItem exists, the FindControl() returns null.