I've bound my grid to an entity collection derived from a View. The view is self referencing and I'd like the grid to represent that parent-child relationship. The top level seems to acting correctly, but when I try and expand a top level node, I get this error.
"Parent table relation set, but no corresponding data-key name found."
I've checked all the obvious, but alas, I can't find the problem.
Any help or ideas would be greatly appreciated..
"Parent table relation set, but no corresponding data-key name found."
I've checked all the obvious, but alas, I can't find the problem.
| <telerik:RadGrid runat="server" id="grdClients" |
| OnNeedDataSource="grdClients_NeedDataSource" |
| Skin="Default2006" |
| AutoGenerateColumns="False" |
| AllowPaging ="True" |
| AllowSorting="True" |
| PageSize="8" |
| GridLines="None" |
| ShowStatusBar="False" |
| DataKeyNames="Id, SuperClientId" > |
| <ExportSettings> |
| <Excel Format="Html" /> |
| </ExportSettings> |
| <PagerStyle Mode="NextPrevAndNumeric"></PagerStyle> |
| <ClientSettings AllowExpandCollapse="true" /> |
| <MasterTableView> |
| <SelfHierarchySettings ParentKeyName="Id" KeyName="SuperClientId" /> |
| <Columns> |
| <telerik:GridHyperLinkColumn |
| DataTextField="Id" |
| DataTextFormatString="edit" |
| UniqueName="colEditbasePage" |
| DataNavigateUrlFormatString="editClient.aspx?id={0}" |
| DataNavigateUrlFields="id"> |
| </telerik:GridHyperLinkColumn> |
| <telerik:GridHyperLinkColumn |
| DataTextField="Id" |
| DataTextFormatString="deactivate" |
| UniqueName="colDeactivateClient" |
| DataNavigateUrlFormatString="?deactivateid={0}" |
| DataNavigateUrlFields="Id"> |
| </telerik:GridHyperLinkColumn> |
| <telerik:GridBoundColumn |
| DataField="CompanyName" |
| DataType="System.String" |
| HeaderText="First Name" |
| SortExpression="CompanyName" |
| UniqueName="colCompanyName" > |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn |
| DataField="City" |
| DataType="System.String" |
| HeaderText="City" |
| SortExpression="City" |
| UniqueName="colCity" > |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn |
| DataField="Country" |
| DataType="System.String" |
| HeaderText="Country" |
| SortExpression="Country" |
| UniqueName="colCountry" > |
| </telerik:GridBoundColumn> |
| <telerik:GridTemplateColumn HeaderText="Roles I fill"> |
| <ItemTemplate> |
| <table cellpadding="1" cellspacing="1" class="customTable"> |
| <tr> |
| <td style="width: 50%"> |
| <%# getRoleIndicator((int)DataBinder.Eval(Container.DataItem, "Id"), Settings.Default.role_clientCGC)%> |
| </td> |
| <td style="width: 50%"> |
| <%# getRoleIndicator((int)DataBinder.Eval(Container.DataItem, "Id"), Settings.Default.role_clientCC)%> |
| </td> |
| </tr> |
| </table> |
| </ItemTemplate> |
| </telerik:GridTemplateColumn> |
| <telerik:GridBoundColumn |
| DataField="NumOfRequestsBought" |
| DataType="System.Int32" |
| HeaderText="Number of Requests Purchased" |
| SortExpression="NumOfRequestsBought" |
| UniqueName="colNumOfRequestsBought" > |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn |
| DataField="NumOfRequestsUsed" |
| DataType="System.Int32" |
| HeaderText="Number of Requests Used" |
| SortExpression="NumOfRequestsUsed" |
| UniqueName="colNumOfRequestsUsed" > |
| </telerik:GridBoundColumn> |
| <telerik:GridCheckBoxColumn |
| DataField="PurchasedApprovals" |
| HeaderText="Purchased Approvals" |
| AllowSorting="true" |
| UniqueName="colPurchasedApprovals" > |
| </telerik:GridCheckBoxColumn> |
| <telerik:GridCheckBoxColumn |
| DataField="PurchasedAgreements" |
| HeaderText="Purchased Agreements" |
| AllowSorting="true" |
| UniqueName="colPurchasedAgreements" > |
| </telerik:GridCheckBoxColumn> |
| </Columns> |
| </MasterTableView> |
| </telerik:RadGrid> |
| protected void Page_Load(object sender, EventArgs e) |
| { |
| if (!Page.IsPostBack) |
| { |
| Page.Title = "GlobeSpec | clients"; |
| Page.Form.DefaultFocus = this.txbFilterGrid.ClientID; |
| Page.Form.DefaultButton = this.btnFilterGrid.UniqueID; |
| grdClients.MasterTableView.FilterExpression = "SuperClientID = 0 OR SuperClientID IS NULL"; |
| } |
| } |
| protected void cmdExcel_Click(object sender, EventArgs e) |
| { |
| this.grdClients.ExportSettings.ExportOnlyData = true; |
| this.grdClients.ExportSettings.IgnorePaging = true; |
| this.grdClients.MasterTableView.ExportToExcel(); |
| } |
| protected void grdClients_NeedDataSource(object source, GridNeedDataSourceEventArgs e) |
| { |
| this.grdClients.DataSource = null; |
| VClientsGridCollection coll = new VClientsGridCollection(); |
| coll.LoadAll(); |
| if (!string.IsNullOrEmpty(this.txbFilterGrid.Text.Trim())) |
| { |
| //coll.Filter += " AND CompanyName Like '" + this.txbFilterGrid.Text.Trim() + @"%'"; |
| coll.Filter = "CompanyName Like '" + this.txbFilterGrid.Text.Trim() + @"%'"; |
| } |
| coll.Sort = "CompanyName"; |
| this.grdClients.DataSource = coll; |
| } |
| protected string getRoleIndicator(int clientId, string roleName) |
| { |
| Person me = (Person) Session["User"]; |
| l = new Lookup(); |
| l.Query.Where(l.Query.LookupName.Like(roleName.Trim())).Select("Id"); |
| l.Query.Load(); |
| pc = new PersonClient(); |
| pc.Query.Where(pc.Query.ClientId.Equal(clientId), |
| pc.Query.RoleId.Equal(l.Id), |
| pc.Query.PersonId.Equal(me.Id)); |
| if(pc.Query.Load()) |
| { |
| if (roleName.Equals(Settings.Default.role_clientCGC.ToString())) |
| { |
| return "CGC"; |
| } |
| else if (roleName.Equals(Settings.Default.role_clientCC.ToString())) |
| { |
| return "CC"; |
| } |
| } |
| return string.Empty; |
| } |
| protected void btnFilterGrid_Click(object sender, EventArgs e) |
| { |
| this.grdClients.DataSource = null; |
| VClientsGridCollection coll = new VClientsGridCollection(); |
| coll.LoadAll(); |
| if (!string.IsNullOrEmpty(this.txbFilterGrid.Text.Trim())) |
| { |
| coll.Filter = "CompanyName Like '" + this.txbFilterGrid.Text.Trim() + @"%'"; |
| } |
| coll.Sort = "CompanyName"; |
| this.grdClients.DataSource = coll; |
| this.grdClients.DataBind(); |
| } |
Any help or ideas would be greatly appreciated..