private void CreateMemHierarchy(short AxisOrdinal, HtmlTable hostTable, Member mem, bool HierIsAggregated, byte TreeDepth, bool autoSelect) { //do not display aggregate, display undlying calc members instead if (HierIsAggregated == true && mem.UniqueName == mem.Hierarchy.FilterMember.UniqueName) { MembersAggregate maggr = mem.Hierarchy.FilterMember as MembersAggregate; if (maggr != null) { for (int i = 0; i < maggr.Members.Count; i++) { CalculatedMember cmem = maggr.Members[i] as CalculatedMember; if (cmem != null) { this.CreateMemHierarchy(AxisOrdinal, hostTable, cmem, HierIsAggregated, TreeDepth, false); // recursion } } } return; } string memIdentifier = _contr.IdentifierFromSchemaMember(mem); string hierIdentifier = mem.Hierarchy.Axis.Ordinal.ToString() + ":" + mem.Hierarchy.Ordinal.ToString(); bool memIsSelected = false; bool memIsOpen = false; bool memIsPlaceholder = false; bool memAutoSelectChildren = (mem.Hierarchy.CalculatedMembers.GetMemberChildrenSet(mem.UniqueName) != null); SchemaMember smem = mem as SchemaMember; if (smem != null) { memIsOpen = smem.IsOpen; memIsPlaceholder = smem.IsPlaceholder; } if (HierIsAggregated) { memIsSelected = (((MembersAggregate)mem.Hierarchy.FilterMember).Members[mem.UniqueName] != null?true:false); } else { memIsSelected = (mem.Hierarchy.GetMember(mem.UniqueName) != null); } HtmlTableRow tr = new HtmlTableRow(); HtmlTableCell td; System.Web.UI.WebControls.Button btn; Literal lit; // --- node contr col-- td = new HtmlTableCell(); td.Attributes.Add("class", "sel_C1"); td.NoWrap = true; tr.Cells.Add(td); // --- node name col-- td = new HtmlTableCell(); lit = new Literal(); for (int i = 0; i < TreeDepth; i++) { lit.Text = lit.Text + " "; } td.Controls.Add(lit); if (memIsOpen) { btn = new System.Web.UI.WebControls.Button(); btn.ToolTip = "Close"; btn.ID = "sel_close:" + memIdentifier; btn.CssClass = "sel_close"; td.Controls.Add(btn); } else { if (mem.CanDrillDown) { btn = new System.Web.UI.WebControls.Button(); btn.ToolTip = "Open"; btn.ID = "sel_open:" + memIdentifier; btn.CssClass = "sel_open"; td.Controls.Add(btn); } else { // no image lit.Text = lit.Text + " "; } } if (memIsPlaceholder == false) { if (AxisOrdinal == 2 && HierIsAggregated == false) { HtmlInputRadioButton radio = new HtmlInputRadioButton(); radio.Name = "m:" + hierIdentifier; radio.ID = "m:" + memIdentifier; radio.EnableViewState = false; radio.Checked = (memIsSelected || autoSelect); radio.Disabled = autoSelect; radio.Attributes.Add("class", "sel_chk"); td.Controls.Add(radio); } else { HtmlInputCheckBox chk = new HtmlInputCheckBox(); chk.ID = "m:" + mem.UniqueName; //note, UniqueName ! chk.EnableViewState = false; chk.Checked = (memIsSelected || autoSelect); chk.Disabled = autoSelect; chk.Attributes.Add("class", "sel_chk"); td.Controls.Add(chk); } } lit = new Literal(); lit.Text = mem.Name; td.Controls.Add(lit); td.Attributes.Add("class", "sel_C"); td.NoWrap = true; tr.Cells.Add(td); // --- node select col-- td = new HtmlTableCell(); if (AxisOrdinal != 2 && memIsOpen) { if (!memAutoSelectChildren) { btn = new System.Web.UI.WebControls.Button(); btn.ToolTip = "Auto-Select Children"; btn.ID = "sel_selauto:" + memIdentifier; btn.CssClass = "sel_selauto"; td.Controls.Add(btn); btn = new System.Web.UI.WebControls.Button(); btn.ToolTip = "Select Children"; btn.ID = "sel_selall:" + memIdentifier; btn.CssClass = "sel_selall"; td.Controls.Add(btn); } btn = new System.Web.UI.WebControls.Button(); btn.ToolTip = "Deselect All Children"; btn.ID = "sel_deselall:" + memIdentifier; btn.CssClass = "sel_deselall"; td.Controls.Add(btn); } td.Attributes.Add("class", "sel_C2"); td.NoWrap = true; tr.Cells.Add(td); hostTable.Rows.Add(tr); if (memIsOpen == false) { return; } // next level members if it's schema member TreeDepth++; if (smem != null) { for (int j = 0; j < smem.Children.Count; j++) { CreateMemHierarchy(AxisOrdinal, hostTable, smem.Children[j], HierIsAggregated, TreeDepth, memAutoSelectChildren); } } }