I have a master/detail RadGrid. I open the form to insert new record to Master table, then open the form to edit a record in Detail table. When I click Cancel on the form to create new, I have an HttpExpcetion "TelerikDemo.User does not contain a property with the name Address". Are there somethings I miss? Thank you.
Here is my markup:
Here is my C# code:
Here is my markup:
| <telerik:RadGrid ID="rgUsers" runat="server" GridLines="None" |
| AutoGenerateColumns="False" AutoGenerateDeleteColumn="True" AutoGenerateEditColumn="True" |
| oneditcommand="rgUsers_EditCommand" |
| onneeddatasource="rgUsers_NeedDataSource" |
| ondetailtabledatabind="rgUsers_DetailTableDataBind" |
| OnUpdateCommand="rgUsers_UpdateCommand" |
| OnInsertCommand="rgUsers_InsertCommand" |
| ondeletecommand="rgUsers_DeleteCommand"> |
| <HeaderContextMenu EnableTheming="True"> |
| <CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation> |
| </HeaderContextMenu> |
| <MasterTableView Name="Users" CommandItemDisplay="Top" DataKeyNames="Id"> |
| <DetailTables> |
| <telerik:GridTableView Name="Contacts" AutoGenerateColumns="False" CommandItemDisplay="Top" DataKeyNames="Id"> |
| <EditFormSettings EditFormType="Template"> |
| <FormTemplate> |
| Address: |
| <asp:TextBox ID="txtAddress" runat="server" Text='<%# Bind("Address") %>' /> |
| <br /> |
| City: |
| <asp:TextBox ID="txtCity" runat="server" Text='<%# Bind("City") %>' /> |
| <br /> |
| Zip |
| <asp:TextBox ID="txtZip" runat="server" Text='<%# Bind("Zip") %>' /> |
| <br /> |
| <asp:LinkButton ID="btnUpdate" runat="server" CommandName="Update" Visible='<%# Eval("Id").ToString().Length != 0 %>'>Update</asp:LinkButton> |
| <asp:LinkButton ID="btnAdd" runat="server" CommandName="PerformInsert" Visible='<%# Eval("Id").ToString().Length == 0 %>'>Add</asp:LinkButton> |
| |
| <asp:LinkButton ID="btnCancel" runat="server" CommandName="Cancel">Cancel</asp:LinkButton> |
| </FormTemplate> |
| </EditFormSettings> |
| <Columns> |
| <telerik:GridBoundColumn DataField="Address" HeaderText="Address" SortExpression="Address" UniqueName="Address"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="City" HeaderText="City" SortExpression="City" UniqueName="City"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="Zip" HeaderText="Zip" SortExpression="Zip" UniqueName="Zip"> |
| </telerik:GridBoundColumn> |
| </Columns> |
| <CommandItemTemplate> |
| <asp:LinkButton ID="btnInitInsert" runat="server" CommandName="InitInsert"> |
| Add new Contact |
| </asp:LinkButton> |
| <asp:LinkButton ID="btnRefresh" runat="server" CommandName="RebindGrid"> |
| Refresh contact list |
| </asp:LinkButton> |
| </CommandItemTemplate> |
| </telerik:GridTableView> |
| </DetailTables> |
| <EditFormSettings EditFormType="Template"> |
| <FormTemplate> |
| First name: |
| <asp:TextBox ID="txtFirstName" runat="server" Text='<%# Bind("FirstName") %>'></asp:TextBox> |
| <br /> |
| Last name: |
| <asp:TextBox ID="txtLastName" runat="server" Text='<%# Bind("LastName") %>'></asp:TextBox> |
| <br /> |
| <asp:LinkButton ID="btnUpdate" runat="server" CommandName="Update" Visible='<%# Eval("Id").ToString().Length != 0 %>'>Update</asp:LinkButton> |
| <asp:LinkButton ID="btnAdd" runat="server" CommandName="PerformInsert" Visible='<%# Eval("Id").ToString().Length == 0 %>'>Add</asp:LinkButton> |
| |
| <asp:LinkButton ID="btnCancel" runat="server" CommandName="Cancel">Cancel</asp:LinkButton> |
| </FormTemplate> |
| </EditFormSettings> |
| <CommandItemTemplate> |
| <asp:LinkButton ID="btnInitInsert" runat="server" CommandName="InitInsert" Visible='<%# !rgUsers.MasterTableView.IsItemInserted %>'> |
| Add new Customer |
| </asp:LinkButton> |
| <asp:LinkButton ID="btnRefresh" runat="server" CommandName="RebindGrid"> |
| Refresh customer list |
| </asp:LinkButton> |
| </CommandItemTemplate> |
| <RowIndicatorColumn> |
| <HeaderStyle Width="20px"></HeaderStyle> |
| </RowIndicatorColumn> |
| <ExpandCollapseColumn> |
| <HeaderStyle Width="20px"></HeaderStyle> |
| </ExpandCollapseColumn> |
| <Columns> |
| <telerik:GridBoundColumn DataField="FirstName" HeaderText="First Name" SortExpression="FirstName" UniqueName="FirstName"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="LastName" HeaderText="Last Name" SortExpression="LastName" UniqueName="LastName"> |
| </telerik:GridBoundColumn> |
| </Columns> |
| </MasterTableView> |
| <FilterMenu EnableTheming="True"> |
| <CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation> |
| </FilterMenu> |
| </telerik:RadGrid> |
Here is my C# code:
| protected void Page_Load(object sender, EventArgs e) |
| { |
| } |
| protected void rgUsers_NeedDataSource(object source, GridNeedDataSourceEventArgs e) |
| { |
| rgUsers.DataSource = TelerikDemo.User.GetAll(); |
| } |
| protected void rgUsers_DetailTableDataBind(object source, GridDetailTableDataBindEventArgs e) |
| { |
| GridDataItem parent = e.DetailTableView.ParentItem; |
| int userId = Convert.ToInt32(parent.GetDataKeyValue("Id")); |
| rgUsers.MasterTableView.DetailTables[0].DataSource = Contact.GetAllContactsForUser(userId); |
| } |
| protected void rgUsers_EditCommand(object source, GridCommandEventArgs e) |
| { |
| e.Item.Edit = true; |
| } |
| protected void rgUsers_UpdateCommand(object source, GridCommandEventArgs e) |
| { |
| GridEditableItem editedItem = e.Item as GridEditableItem; |
| if (e.Item.OwnerTableView.Name.Equals("Users")) // Update user |
| { |
| int userId = Convert.ToInt32(editedItem.GetDataKeyValue("Id")); |
| string firstName = (editedItem.FindControl("txtFirstName") as TextBox).Text; |
| string lastName = (editedItem.FindControl("txtLastName") as TextBox).Text; |
| TelerikDemo.User.Update(userId, firstName, lastName); |
| } |
| else if (e.Item.OwnerTableView.Name.Equals("Contacts")) // Update contact |
| { |
| int contactId = Convert.ToInt32(editedItem.GetDataKeyValue("Id")); |
| string address = (editedItem.FindControl("txtAddress") as TextBox).Text; |
| string city = (editedItem.FindControl("txtCity") as TextBox).Text; |
| string zip = (editedItem.FindControl("txtZip") as TextBox).Text; |
| Contact.Update(contactId, address, city, zip); |
| } |
| } |
| protected void rgUsers_InsertCommand(object source, GridCommandEventArgs e) |
| { |
| GridEditableItem editedItem = e.Item as GridEditableItem; |
| if (e.Item.OwnerTableView.Name.Equals("Users")) // Create user |
| { |
| string firstName = (editedItem.FindControl("txtFirstName") as TextBox).Text; |
| string lastName = (editedItem.FindControl("txtLastName") as TextBox).Text; |
| TelerikDemo.User.Create(firstName, lastName); |
| } |
| else if (e.Item.OwnerTableView.Name.Equals("Contacts")) // Create contact |
| { |
| string address = (editedItem.FindControl("txtAddress") as TextBox).Text; |
| string city = (editedItem.FindControl("txtCity") as TextBox).Text; |
| string zip = (editedItem.FindControl("txtZip") as TextBox).Text; |
| GridDataItem parent = e.Item.OwnerTableView.ParentItem; |
| int userId = Convert.ToInt32(parent.GetDataKeyValue("Id")); |
| Contact.Create(address, city, zip, userId); |
| } |
| } |
| protected void rgUsers_DeleteCommand(object source, GridCommandEventArgs e) |
| { |
| GridEditableItem editedItem = e.Item as GridEditableItem; |
| int id = Convert.ToInt32(editedItem.GetDataKeyValue("Id")); |
| if (e.Item.OwnerTableView.Name.Equals("Users")) // Remove user |
| { |
| TelerikDemo.User.Remove(id); |
| } |
| else if (e.Item.OwnerTableView.Name.Equals("Contacts")) // Remove contact |
| { |
| Contact.Remove(id); |
| } |
| } |