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