2013-07-11 73 views
0

我正在撰寫報告以表示給定客戶的工作計劃。該報表必須類似於日曆,並顯示跨越多天的工作訂單,類似於Outlook。SQL Server Reporting Services類似日曆的報告

我用兩個tablix控件相當快速地製作了日曆。我現在的問題和這個問題的原因是代表跨越事件。

目前,我渲染(當然使用的測試數據):http://i.imgur.com/KISNhsx.png

我確定很多東西在存儲過程(多少天給定的事件跨度,這一天,鑑於事件)和操縱每個單元的背景和邊界,以便它們出現被合併。除單元格文本外,此功能可以正常工作:如果事件名稱太長,則會中斷它。

我已經做了一些研究,看來你不能以編程方式合併單元格。我認爲我最大的希望可能是讓事件的名稱溢出(在Excel中你會看到一個單元格溢出的方式)。

這可能嗎?

僅供參考,我們正在使用SQL Server 2012,但我通過VS2008使用BIDS生成報告。這是一個普通的RDL報告。我不反對購買一個控制器來替代我。

謝謝!

+0

我做不認爲這是可能的。該解決方案會增加單元尺寸。 – PookPook

+0

我很擔心會是這樣。我可能不得不使這個網站的基礎,真相被告知,我想從一開始就做。 – Bill

回答

0

我制定出了另一個滿足上級要求的解決方案。

簡而言之:我創建了一個填充了事件的簡單HTML日曆。然後,我將頁面渲染爲圖像(如屏幕截圖),並使用SSRS中的Image Control加載它。 SSRS報告將其參數作爲查詢字符串傳遞給網頁。

對於好奇誰通過網絡搜索發現了這個問題,這是我用它來創建位圖的方法:

private Bitmap CreateScreenshot(string url, int width, int height) 
    { 
     Bitmap screenshot = null; 

     var thread = new Thread(() => 
      { 
       using (var browser = new WebBrowser()) 
       { 
        browser.ScrollBarsEnabled = false; 
        browser.ScriptErrorsSuppressed = true; 

        browser.Width = width; 
        browser.Height = height; 

        browser.Navigate(url); 

        while (browser.ReadyState != WebBrowserReadyState.Complete) 
        { 
         Application.DoEvents(); 
        } 

        screenshot = new Bitmap(width, height); 
        browser.DrawToBitmap(screenshot, new Rectangle(0, 0, width, height)); 
       } 
      }); 

     thread.SetApartmentState(ApartmentState.STA); 
     thread.Start(); 
     thread.Join(); 

     return screenshot; 
    } 

我把它從控制器內,所以:

public void Action() 
    { 
     var model = new ViewModel 
      { 
       StartDate = new DateTime(2013, 6, 30), 
       EndDate = new DateTime(2013, 8, 10), 
       OpsId = #### 
      }; 


     var url = Url.Action("ActionThatCallsCalendar", "Controller", new { area = "Area", viewModel = new JavaScriptSerializer().Serialize(model) }, Request.Url.Scheme); 


     Response.ContentType = "image/jpeg"; 
     Response.Clear(); 

     var screenshot = CreateScreenshot(url, 1400, 1050); 
     screenshot.Save(Response.OutputStream, ImageFormat.Jpeg); 

     Response.Flush(); 
    } 
相關問題