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.