I am attempting to build hierarchy in a grid from business objects. If I select ‘Auto Generate Hierarchy’ and ‘Auto Generate Columns’ it does work. Expanding a parent row shows its related children in RadGrid.
However, when I attempt to programmatically build the relation it does not work. Expanding a parent row does not show its related children.
I have followed the GridView Object Relational Hierarchy Mode documentation word for word without success. I have used ‘property builder’ of the grid as per the tutorial but that did not help either.
Here is a sample code:
private void FormEventStaffPlans_Load(object sender, EventArgs e) { // --------- Parent ----------- // Staff plan unique identifier. GridViewDecimalColumn dColumn = new GridViewDecimalColumn("StaffPlanId"); dColumn.HeaderText = "StaffPlanId"; dColumn.IsVisible = false; dColumn.ReadOnly = true; this.radGridViewStaffPlans.Columns.Add(dColumn); // Total required staff. dColumn = new GridViewDecimalColumn("NumberOfStaffPerShift"); dColumn.HeaderText = "Staff Req"; this.radGridViewStaffPlans.Columns.Add(dColumn); // Total male dColumn = new GridViewDecimalColumn("NumberOfMalePerShift"); dColumn.HeaderText = "Male"; this.radGridViewStaffPlans.Columns.Add(dColumn); // Total female dColumn = new GridViewDecimalColumn("NumberOfFemalePerShift"); dColumn.HeaderText = "Female"; this.radGridViewStaffPlans.Columns.Add(dColumn); // Employee Id (TO DO: change this to dropdown box) dColumn = new GridViewDecimalColumn("EmployeeId"); dColumn.HeaderText = "Empoloyee"; this.radGridViewStaffPlans.Columns.Add(dColumn); // Labour hire company Id (TO DO: change this to dropdown list) dColumn = new GridViewDecimalColumn("HireCompanyId"); dColumn.HeaderText = "HireCompanyId"; this.radGridViewStaffPlans.Columns.Add(dColumn); this.radGridViewStaffPlans.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; // --------- Child ----------- // Create child template (for staff shifts) GridViewTemplate childTemplate = new GridViewTemplate(); this.radGridViewStaffPlans.Templates.Add(childTemplate); // Set columns of child template // Shift unique identifier. dColumn = new GridViewDecimalColumn("ShiftId"); dColumn.HeaderText = "ShiftId"; dColumn.IsVisible = false; dColumn.ReadOnly = true; childTemplate.Columns.Add(dColumn); // Shift from (display date only). GridViewDateTimeColumn dtColumn = new GridViewDateTimeColumn("ShiftFrom"); dtColumn.Format = DateTimePickerFormat.Short; dtColumn.HeaderText = "Date From"; childTemplate.Columns.Add(dtColumn); // Shift to (display date only). dtColumn = new GridViewDateTimeColumn("ShiftTo"); dtColumn.Format = DateTimePickerFormat.Short; dtColumn.HeaderText = "Date To"; childTemplate.Columns.Add(dtColumn); // Shift from (display time only). dtColumn = new GridViewDateTimeColumn("ShiftFrom"); dtColumn.Format = DateTimePickerFormat.Time; dtColumn.HeaderText = "Shift Start"; childTemplate.Columns.Add(dtColumn); // Shift to (display time only). dtColumn = new GridViewDateTimeColumn("ShiftTo"); dtColumn.Format = DateTimePickerFormat.Time; dtColumn.HeaderText = "Shift End"; childTemplate.Columns.Add(dtColumn); // Shift part. dColumn = new GridViewDecimalColumn("ShiftPart"); dColumn.HeaderText = "Shift Part"; childTemplate.Columns.Add(dColumn); // Break duration. dColumn = new GridViewDecimalColumn("BreakDuration"); dColumn.HeaderText = "Break Duration"; childTemplate.Columns.Add(dColumn); // Variation code. GridViewTextBoxColumn tColumn = new GridViewTextBoxColumn("VariationCode"); tColumn.HeaderText = "Variation Code"; childTemplate.Columns.Add(tColumn); // Shift cost. dColumn = new GridViewDecimalColumn("ShiftCost"); dColumn.HeaderText = "Shift Cost"; dColumn.ReadOnly = true; childTemplate.Columns.Add(dColumn); // Shift cost type. tColumn = new GridViewTextBoxColumn("ShiftCostType"); tColumn.HeaderText = "Shift Cost Type"; dColumn.ReadOnly = true; childTemplate.Columns.Add(tColumn); // Area (TO DO: change this to dropdown list). dColumn = new GridViewDecimalColumn("AreaId"); dColumn.HeaderText = "Area"; childTemplate.Columns.Add(dColumn); // Shift type. tColumn = new GridViewTextBoxColumn("ShiftType"); tColumn.HeaderText = "Shift Type"; childTemplate.Columns.Add(tColumn); childTemplate.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; // Add the relation between parent (staff plans) and the child (staff plan shifts) GridViewRelation relation = new GridViewRelation(this.radGridViewStaffPlans.MasterTemplate, childTemplate); relation.ChildColumnNames.Add("EventShift"); this.radGridViewStaffPlans.Relations.Add(relation); // Add data source to grid (parent). IList<EventStaffPlan> list = _siteProxy.GetEventStaffPlans(34); this.radGridViewStaffPlans.DataSource = list; } public class EventStaffPlan:BusinessObject { /// <summary> /// Default constructor for EventStaffPlan class. /// </summary> public EventStaffPlan() { } /// <summary> /// Overloaded constructor for EventStaffPlan class. /// Initialises automatic properties. /// </summary> /// <param name="staffPlanId">Staff plan unique identifier.</param> /// <param name="numberOfStaffPerShift">Total number of staff per shift.</param> /// <param name="numberOfMaleStaffPerShift">Number of male staff per shift.</param> /// <param name="numberOfFemaleStaffPerShift">Number of female staff per shift. </param> /// <param name="employeeId">Employee unique identifier.</param> /// <param name="hireCompanyId">Hire company unique identifier.</param> /// <param name="eventShift">List of EventStaffShift objects.</param> public EventStaffPlan(int staffPlanId, int numberOfStaffPerShift, int numberOfMaleStaffPerShift, int numberOfFemaleStaffPerShift, int employeeId, int hireCompanyId, IList<EventStaffShift> eventShift) { StaffPlanId = staffPlanId; NumberOfStaffPerShift = numberOfStaffPerShift; NumberOfMalePerShift = numberOfMaleStaffPerShift; NumberOfFemalePerShift = numberOfFemaleStaffPerShift; EmployeeId = employeeId; HireCompanyId = hireCompanyId; EventShift = eventShift; } /// <summary> /// Gets or sets staff plan unique identifier. /// </summary> public int StaffPlanId { get; set; } /// <summary> /// Gets or sets total number of staff per shift. /// </summary> public int NumberOfStaffPerShift { get; set; } /// <summary> /// Gets or sets number of male employees per shift. /// </summary> public int NumberOfMalePerShift { get; set; } /// <summary> /// Gets or sets number of female employees per shift. /// </summary> public int NumberOfFemalePerShift { get; set; } /// <summary> /// Gets or sets employee unique identifier. /// </summary> public int EmployeeId { get; set; } /// <summary> /// Gets or sets hire company unique identifier. /// </summary> public int HireCompanyId { get; set; } /// <summary> /// Gets or sets list of event staff plan shift objects. /// </summary> public IList<EventStaffShift> EventShift { get; set; } }
Class EventStaffShift does not have any related lists.
Working with version: 2011.1 11.419