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); |
} |
} |