public void AddFilteredByNameSet(Level lev, string LessOrEq, string GrOrEq, bool Prompt) { FilteredByNameSet levSet = new FilteredByNameSet( null, lev.Hierarchy, lev, LessOrEq, GrOrEq); levSet.Prompt = Prompt; if (lev.Hierarchy.Axis.Ordinal == 2) { MembersAggregate aggr = lev.Hierarchy.FilterMember as MembersAggregate; if (aggr != null) { aggr.AddMember(levSet); //if aggegated } else { lev.Hierarchy.AddMember(levSet, true); } } else { lev.Hierarchy.AddMember(levSet, true); } }
public void SetHierarchyAggregate(string UniqueName, bool Value) { Hierarchy hier = _report.Schema.Hierarchies[UniqueName]; if (hier == null) { throw new Exception("Error: invalid identifier"); } if (Value == true) { MembersAggregate aggr = new MembersAggregate(null, hier); hier.AddMember(aggr, true); } else { hier.AddMember(hier.Levels[0].DefaultMember, true); } }
private void RecursiveRemoveMembers(SchemaMembers smems, bool isAggr, ref SortedList ReAddDataMembers) { for (int i = 0; i < smems.Count; i++) { SchemaMember smem = smems[i]; // attempt to remove if (isAggr) { if (smem.UniqueName != smem.Hierarchy.FilterMember.UniqueName) { MembersAggregate filtMem = (MembersAggregate)smem.Hierarchy.FilterMember; // check if readd Member mem = (Member)filtMem.Members[smem.UniqueName]; if (mem != null) { ReAddDataMembers.Add(mem.UniqueName, mem); } //remove filtMem.RemoveMember(smem.UniqueName); } } else { // check if readd Member mem = smem.Hierarchy.DataMembers[smem.UniqueName]; if (mem != null) { ReAddDataMembers.Add(mem.UniqueName, mem); } //remove smem.Hierarchy.RemoveMember(smem); } if (smem.IsOpen) { this.RecursiveRemoveMembers(smem.Children, isAggr, ref ReAddDataMembers); } } }
public void AddMembersAndRemoveSiblings(System.Collections.Specialized.StringCollection UniqueNames, bool MultiSelect) { if (MultiSelect) { for (int j = 0; j < _report.Axes.Count; j++) { for (int i = 0; i < _report.Axes[j].Hierarchies.Count; i++) { Hierarchy hier = _report.Axes[j].Hierarchies[i]; if (hier.IsOpen) { bool IsAggregateHierarchy = (hier.Axis.Ordinal == 2 && hier.FilterMember is MembersAggregate?true:false); //only aggregate can be multi-selected if (IsAggregateHierarchy == false && hier.Axis.Ordinal == 2) { continue; //beacuse if MultiSelect memebrs are not applicable to non-aggr hier on filter } // AddMembersAndRemoveSiblings(hier.SchemaMembers, UniqueNames , IsAggregateHierarchy); //it's not filter OR aggr hier on filter // deal with schema members SortedList reAddMembers = new SortedList(); this.RecursiveRemoveMembers(hier.SchemaMembers, IsAggregateHierarchy, ref reAddMembers); this.AddMembers(hier, UniqueNames, reAddMembers); // deal with calc members if (IsAggregateHierarchy) { MembersAggregate maggr = hier.FilterMember as MembersAggregate; if (maggr != null) { for (int n = 0; n < maggr.Members.Count; n++) { if (UniqueNames.Contains(maggr.Members[n].UniqueName) == false) { maggr.Members.RemoveAt(n); n--; } } } } else { for (int n = 0; n < hier.CalculatedMembers.Count; n++) { if (UniqueNames.Contains(hier.CalculatedMembers[n].UniqueName) == false) { hier.CalculatedMembers.RemoveAt(n); n--; } } } } } } } else { // axis2 // UniqueNames are actually Identifiers for (int i = 0; i < UniqueNames.Count; i++) { SchemaMember mem = this.SchemaMemberFromIdentifier(UniqueNames[i]); if (mem != null) { mem.Hierarchy.AddMember(mem, true); } } } }
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); } } }
private void CreateHierarchy(short AxisOrdinal, HtmlTable hostTable, Hierarchy hier, byte TreeDepth) { //string hierIdentifier=_contr.IdentifierFromHierarchy(hier); bool hierIsAggregated = false; bool hierIsMeasures = (hier.UniqueName == "[Measures]"); MembersAggregate aggr = hier.FilterMember as MembersAggregate; if (aggr != null) { hierIsAggregated = true; } HtmlTableRow tr = new HtmlTableRow(); HtmlTableCell td; System.Web.UI.WebControls.Button btn; // --- node contr col-- tr = new HtmlTableRow(); td = new HtmlTableCell(); if (AxisOrdinal != 2) { btn = new System.Web.UI.WebControls.Button(); btn.ToolTip = "Move To Filter"; btn.ID = "sel_del:" + hier.UniqueName; //hierIdentifier; btn.CssClass = "sel_del"; td.Controls.Add(btn); btn = new System.Web.UI.WebControls.Button(); btn.ToolTip = "Move Up"; btn.ID = "sel_up:" + hier.UniqueName; //hierIdentifier; btn.CssClass = "sel_up"; td.Controls.Add(btn); btn = new System.Web.UI.WebControls.Button(); btn.ToolTip = "Move Down"; btn.ID = "sel_down:" + hier.UniqueName; //hierIdentifier; btn.CssClass = "sel_down"; td.Controls.Add(btn); } else { btn = new System.Web.UI.WebControls.Button(); btn.ToolTip = "Move To Row"; btn.ID = "sel_torow:" + hier.UniqueName; //hierIdentifier; btn.CssClass = "sel_torow"; td.Controls.Add(btn); btn = new System.Web.UI.WebControls.Button(); btn.ToolTip = "Move To Column"; btn.ID = "sel_tocol:" + hier.UniqueName; //hierIdentifier; btn.CssClass = "sel_tocol"; td.Controls.Add(btn); } td.Attributes.Add("class", "sel_C1"); td.NoWrap = true; tr.Cells.Add(td); // --- node name col-- td = new HtmlTableCell(); Literal lit = new Literal(); for (int i = 0; i < TreeDepth; i++) { lit.Text = lit.Text + " "; } td.Controls.Add(lit); btn = new System.Web.UI.WebControls.Button(); if (hier.IsOpen) { btn.ToolTip = "Close"; btn.ID = "sel_hclose:" + hier.UniqueName; //hierIdentifier; btn.CssClass = "sel_close"; } else { btn.ToolTip = "Open"; btn.ID = "sel_hopen:" + hier.UniqueName; //hierIdentifier; btn.CssClass = "sel_open"; } td.Controls.Add(btn); lit = new Literal(); lit.Text = hier.Caption; 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 && hier.IsOpen && !hierIsMeasures) { btn = new System.Web.UI.WebControls.Button(); btn.ToolTip = "Select Children"; btn.ID = "sel_hselall:" + hier.UniqueName; //hierIdentifier; btn.CssClass = "sel_selall"; td.Controls.Add(btn); btn = new System.Web.UI.WebControls.Button(); btn.ToolTip = "Deselect All Children"; btn.ID = "sel_hdeselall:" + hier.UniqueName; //hierIdentifier; btn.CssClass = "sel_deselall"; td.Controls.Add(btn); } else if (AxisOrdinal == 2 && !hierIsMeasures) { btn = new System.Web.UI.WebControls.Button(); if (hierIsAggregated) { btn.ToolTip = "Set Aggregate Off"; btn.ID = "sel_aggr_off:" + hier.UniqueName; //hierIdentifier; btn.CssClass = "sel_aggr_on"; } else { btn.ToolTip = "Set Aggregate On"; btn.ID = "sel_aggr_on:" + hier.UniqueName; //hierIdentifier; btn.CssClass = "sel_aggr_off"; } td.Controls.Add(btn); } td.Attributes.Add("class", "sel_C2"); td.NoWrap = true; tr.Cells.Add(td); hostTable.Rows.Add(tr); if (hier.IsOpen == false) { return; } TreeDepth++; // data members level depth=0 for (int j = 0; j < hier.SchemaMembers.Count; j++) { CreateMemHierarchy(AxisOrdinal, hostTable, hier.SchemaMembers[j], hierIsAggregated, TreeDepth, false); } // calc members for (int j = 0; j < hier.CalculatedMembers.Count; j++) { CreateMemHierarchy(AxisOrdinal, hostTable, hier.CalculatedMembers[j], hierIsAggregated, 0, false); } }