2015-09-16 38 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

非常感謝。如果子過程不超過三個子過程。會更容易嗎? –