2015-09-16 35 views
1

这是我的数据库(数据集)。“主进程”可以分离到许多“子进程”。rdlc报告中的水平和自定义表格

实施例:A是主要process.It的具有三个子过程(A1,A2和A3)

----Main Process---|----SUB_PROCESS---| 
      A   |  a1 
      A   |  a2 
      A   |  a3 
      B   |  b1 
      B   |  b2 
      B   |  b3 
      B   |  b4 
      B   |  b5 
      C   |  c1 
      C   |  c2 

报告将与上述数据集的结合。 下图是我的报告布局。

enter image description here

  • 水平的Tablix(更改行到列)
  • 如果主处理具有 “子过程” 超过3个元素。下一个记录必须跳过写入子过程元素。

请帮助我,这是如此困难。可能吗?

回答

3

这真的很难,我真的不认为有一个简单的方法来解决这个问题。我会通过创建一个新的数据源来解决这个问题,在这个新的数据源中你可以很好地组合一切。

动态地做到这一点确实很难。但下面是我如何处理这个例子的例子。有固定数量的行(在你的情况4),所以我为每行创建新列表并动态填充它们,动态填充空字符串空行。这样桌子将水平增长并保持4行。

var row1 = new List<string>(); 
var row2 = new List<string>(); 
var row3 = new List<string>(); 
var row4 = new List<string>(); 
var rowHeaders = new List<string>(); 

myDataList.OrderBy(p => p.MainProcess).ThenBy(p => p.SubProcess); 
foreach (var proc in myDataList) 
{ 
    if (!rowHeaders.Contains(proc.MainProcess)) 
    { 
     row1.Add(proc.MainProcess); 
     rowHeaders.Add(proc.MainProcess); 
     if (row2.Count == row1.Count - 2) 
      row2.Add(""); 
     if (row3.Count == row1.Count - 2) 
      row3.Add(""); 
     if (row4.Count == row1.Count - 2) 
      row4.Add(""); 
     row2.Add(proc.SubProcess); 
    } 
    else 
    { 
     if (row2.Count == row1.Count - 1) 
     { 
      row2.Add(proc.SubProcess); 
     } 
     else 
     { 
      if (row3.Count == row2.Count - 1) 
      { 
       row3.Add(proc.SubProcess); 
      } 
      else 
      { 
       if (row4.Count == row3.Count - 1) 
       { 
        row4.Add(proc.SubProcess); 
       } 
       else 
       { 
        row1.Add(proc.SubProcess); 
       } 
      } 
     } 
    } 
} 


if(row2.Count < row1.Count) 
    row2.Add(""); 
if (row3.Count < row2.Count) 
    row3.Add(""); 
if (row4.Count < row3.Count) 
    row4.Add(""); 

var myDataSource = new List<List<string>>(); 
myDataSource.Add(row1); 
myDataSource.Add(row2); 
myDataSource.Add(row3); 
myDataSource.Add(row4); 

有可能有更多干净的方法来过滤您的数据,但这绝对会做伎俩。要以粗体文本形式获得主过程,您可以添加“rowHeader”列表作为参数并使用表达式。

我希望这对你有任何帮助,如果有人知道如何清理我的代码,请随时编辑。

+0

非常感谢。如果子过程不超过三个子过程。会更容易吗? –