#region 加载单个Cube信息
private void BindCubeInfo(string cubeName)
{
if (tvCubeInfo.Nodes[cubeName] != null)
{
tvCubeInfo.Nodes.RemoveByKey(cubeName);
}
CubeDef cubeDef = co.GetCube(cubeName);
tvCubeInfo.Nodes.Add(cubeDef.Name, cubeDef.Caption, "Cube", "Cube");
tvCubeInfo.Nodes[cubeDef.Name].Tag = cubeDef;
tvCubeInfo.Nodes[cubeDef.Name].Nodes.Add("Measures_", "Measures", "Measure", "Measure");
tvCubeInfo.Nodes[cubeDef.Name].Expand();
BindMeasuresForCube(cubeName);
BindDimensionsForCube(cubeDef);
}
private TreeNode GetCubeNode(string cubeName)
{
return tvCubeInfo.Nodes[cubeName];
}
private TreeNode GetMeasuresRoot(string cubeName)
{
return tvCubeInfo.Nodes[cubeName].Nodes["Measures_"];
}
private void BindMeasuresForCube(string cubeName)
{
IEnumerable measures = co.GetMeasures(cubeName);
TreeNode rootOfMeasures = GetMeasuresRoot(cubeName);
rootOfMeasures.Nodes.Clear();
if (measures == null) return;
bool hasGroup = measures.FirstOrDefault().Properties.Find("MEASUREGROUP_NAME") != null;
if (hasGroup)
{
var groups = measures.Select(r => r.Properties["MEASUREGROUP_NAME"].Value.ToString()).Distinct();
foreach (var group in groups.OrderBy(r => r))
{
var tempMeasures = measures.Where(r => r.Properties["MEASUREGROUP_NAME"].Value.ToString().Equals(group));
rootOfMeasures.Nodes.Add(group, group, "Group", "Group");
foreach (var item in tempMeasures.OrderBy(r => r.Caption))
{
string name = item.Name;//.Replace("$", "");
string caption = item.Caption;//.Replace("$", "");
TreeNode tempNode = new TreeNode(caption);
tempNode.Name = name;
tempNode.Tag = item;
bool visible = item.Properties["MEASURE_IS_VISIBLE"].Value.Value(true);
Property expressionProperty = item.Properties.Find("EXPRESSION");
string expression = expressionProperty == null ? "" : expressionProperty.Value.ToJString();
string key = string.IsNullOrEmpty(expression) ? "Measure" : "CalMeasure";
tempNode.SelectedImageKey = tempNode.ImageKey = visible ? key : "" + key;
tempNode.ToolTipText = string.Format("Name:[{0}]Caption:[{1}]", item.Name, item.Caption);
rootOfMeasures.Nodes[group].Nodes.Add(tempNode);
}
}
}
else
{
rootOfMeasures.Nodes.Add("DefaultGroup", "DefaultGroup", "Group", "Group");
foreach (var item in measures.OrderBy(r => r.Caption))
{
string name = item.Name;//.Replace("$", "");
string caption = item.Caption;//.Replace("$", "");
TreeNode tempNode = new TreeNode(caption);
tempNode.Name = name;
tempNode.Tag = item;
bool visible = item.Properties["MEASURE_IS_VISIBLE"].Value.Value(true);
Property expressionProperty = item.Properties.Find("EXPRESSION");
string expression = expressionProperty == null ? "" : expressionProperty.Value.ToJString();
string key = string.IsNullOrEmpty(expression) ? "Measure" : "CalMeasure";
tempNode.SelectedImageKey = tempNode.ImageKey = visible ? key : "" + key;
tempNode.ToolTipText = string.Format("Name:[{0}]Caption:[{1}]", item.Name, item.Caption);
rootOfMeasures.Nodes[0].Nodes.Add(tempNode);
}
}
}
private void BindDimensionsForCube(CubeDef cubeDef)
{
IEnumerable dimensions = cubeDef.Dimensions.Cast();
if (dimensions == null) return;
TreeNode cubeNode = GetCubeNode(cubeDef.Name);
for (int i = cubeNode.Nodes.Count - 1; i >= 0; i--)
{
if (!cubeNode.Nodes[i].Name.Equals("Measures_", StringComparison.CurrentCultureIgnoreCase))
{
cubeNode.Nodes.RemoveAt(i);
}
}
foreach (var item in dimensions)
{
if (item.Name.Equals("Measures") || item.Caption.Equals("Measures")) continue;
string name = item.Name.Replace("$", "");
string caption = item.Caption.Replace("$", "");
TreeNode tempNode = new TreeNode(caption);
tempNode.Name = name;
bool visible = item.Properties["DIMENSION_IS_VISIBLE"].Value.Value(true);
tempNode.SelectedImageKey = tempNode.ImageKey = visible ? "Dim" : "Dim";
tempNode.Tag = item;
BindHierarchies(tempNode, item.Hierarchies);
cubeNode.Nodes.Add(tempNode);
}
}
private void BindHierarchies(TreeNode dimNode, HierarchyCollection hierarchies)
{
if (hierarchies == null || hierarchies.Count == 0) return;
foreach (var hierarchy in hierarchies)
{
string name = hierarchy.Name.Replace("$", "");
string caption = hierarchy.Caption.Replace("$", "");
TreeNode tempNode = new TreeNode(caption);
tempNode.Name = name;
tempNode.Tag = hierarchy;
bool visible = hierarchy.Properties["HIERARCHY_IS_VISIBLE"].Value.Value(true);
string key = hierarchy.Levels.Count > 2 ? "Hie" : "SingleHie";
tempNode.SelectedImageKey = tempNode.ImageKey = visible ? key : "" + key;
BindLevels(tempNode, hierarchy.Levels);
dimNode.Nodes.Add(tempNode);
}
}
private void BindLevels(TreeNode root, LevelCollection levels)
{
if (levels == null || levels.Count == 0) return;
foreach (var level in levels)
{
string name = level.Name.Replace("$", "");
string caption = level.Caption.Replace("$", "");
TreeNode tempNode = new TreeNode(caption);
tempNode.Name = name;
bool visible = level.Properties["LEVEL_IS_VISIBLE"].Value.Value(true);
tempNode.SelectedImageKey = tempNode.ImageKey = visible ? "Level" : "Level";
tempNode.Tag = level;
root.Nodes.Add(tempNode);
}
}
private void ExpendMembers(TreeNode root)
{
if (!root.ImageKey.Equals("Level") && !root.ImageKey.Equals("Member")) return;
if (root.Nodes.Count > 0) return;
MemberCollection members = null;
if (root.ImageKey.Equals("Level"))
{
Level level = root.Tag as Level;
members = level.GetMembers();
}
else if (root.ImageKey.Equals("Member"))
{
Member member = root.Tag as Member;
members = member.GetChildren();
}
else
{
return;
}
if (members == null || members.Count <= 0) return;
foreach (var member in members)
{
string name = member.Name.Replace("$", "");
string caption = member.Caption.Replace("$", "");
TreeNode tempNode = new TreeNode(caption);
tempNode.Name = name;
tempNode.SelectedImageKey = tempNode.ImageKey = "Member";
tempNode.Tag = member;
root.Nodes.Add(tempNode);
}
root.Expand();
}
#endregion
标签:C#