2013-03-07 79 views
6

有沒有什麼辦法可以在Microsoft.Reporting.WebForms.ReportViewer控件中添加我的自定義控件。
我正在開發ASP.NET Web應用程序,我想在reportviewer的toolBar中添加我的自定義控件。Microsoft.Reporting.WebForms.ReportViewer控制在工具欄內添加自定義控件

讀這個blogspot它看起來像在WinForms中是可能的。

因此,我開始編碼我自己的RerpotViewerClass,繼承ReportViewer,並在開始時進行堆疊。 看起來像我無法重寫WebForms上的OnControlAdded方法?
當我然後使用OnLoad()或任何其他?

public class ReportViewerToolbarExtension : Microsoft.Reporting.WebForms.ReportViewer 
    { 
     protected override void OnControlAdded(ControlEventArgs e) 
     { 

       base.OnControlAdded(e); 

     }   
    } 

Raisse錯誤

'Microsoft.Reporting.WebForms.ReportViewer' does not contain a definition for 'OnControlAdded' 

而且 「ControlEventArgs」 是痛苦的一部分給我嗎?

當我嘗試實施SetToolStripItems(控制三)

我不能使用ToolStripItemCollection也是工具條becuse他們是屬於命名空間System.Windows.Forms的。
我應該引用WinForms還是Web命名空間中有模擬控件?

+0

你不能使用Windows窗體控件在Web表單報告。有沒有簡單的方法,請參閱我的更新回答 – dmportella 2013-03-12 15:17:16

回答

9

不幸的是,無法自定義網絡報告查看器工具欄。通過查看反彙編的代碼,您可以看到所使用的ToolbarControl是一個自定義的,它是一個內部密封類,您只能隱藏或顯示工具欄。

但是,您可以隱藏工具欄並創建自己的工具欄,以實現與現有控件和您自己的控件相同的功能。

這是Microsoft建議的路線。

如果您需要不同的工具欄實現,您可以創建一個 自定義工具欄來替換默認工具欄。

這在發現:http://msdn.microsoft.com/en-us/library/ms251670.aspx

我會做的是反彙編代碼,並再次爲公共類所有這一切從我第一次看似乎並不具備子類重新實現它任何事情太複雜或難以做到。

也有可能通過前端通過編輯使用工具,如jQuery的DOM API DOM來添加。下面的Web開發者帖子展示了你如何做到這一點。請記住影響如果您想要將服務器端控件添加到工具欄中,您將需要確保您不會使視圖狀態無效並且它們正常工作。

請在asp.net論壇上查看以下帖子,查看類似的問題。

有用的拆機工具。

希望這有助於

5

enter image description here

Default.aspx的

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <script src="Scripts/jquery-1.9.1.min.js" type="text/javascript"></script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <asp:Label ID="Label1" runat="server" Text=""></asp:Label> 
    <asp:ScriptManager runat="server" EnablePartialRendering="false"> 
    </asp:ScriptManager> 
    <rsweb:ReportViewer ID="ReportViewer1" runat="server" Width="830px" Font-Names="Verdana" Font-Size="8pt" InteractiveDeviceInfos="(Коллекция)" WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt"> 
     <LocalReport ReportPath="Report.rdlc"> 
     </LocalReport> 
    </rsweb:ReportViewer> 
    <div id="container" class=" " style="display: inline-block; font-family: Verdana; font-size: 8pt; vertical-align: top;"> 
     <table cellpadding="0" cellspacing="0" style="display: inline;"> 
      <tbody> 
       <tr> 
        <td height="28px"> 
         <asp:DropDownList runat="server" ID="ComboBox1" OnSelectedIndexChanged="ComboBox1_SelectedIndexChanged" AutoPostBack="True"> 
          <asp:ListItem>Option 1</asp:ListItem> 
          <asp:ListItem>Option 2</asp:ListItem> 
          <asp:ListItem>Option 3</asp:ListItem> 
         </asp:DropDownList> 
        </td> 
       </tr> 
      </tbody> 
     </table> 
    </div> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $($('#ReportViewer1_fixedTable').find('td[colspan=3] div[id^="ReportViewer1"]')[1]) 
        .find('div') 
        .first() 
        .append($('#container').detach()); 
     }); 
    </script> 
    </form> 
</body> 
</html> 

Default.aspx.cs

using System; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 

    protected void ComboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     Label1.Text = ComboBox1.SelectedItem.Text; 
    } 
} 

當你使用ExtJS的或Ext.Net然後替換腳本塊用:

<script type="text/javascript"> 
    Ext.onReady(function() { 
     Ext.get(Ext.query('#ReportViewer1 td[colspan=3] div[id^="ReportViewer1"]')[1]).last().appendChild(Ext.get(Ext.query('#container'))); 
    }); 
</script> 
+0

Thanx,請問我需要參考我的項目jQuery的? – adopilot 2013-03-14 17:12:58

+1

是的,您需要將jquery安裝到您的項目中。在默認情況下,jQuery已經存在。你可以刷新它的版本使用: PM>安裝包jQuery – 2013-03-14 17:19:07

+0

我可以粗暴的問,這可以使用Ext.Net完成,因爲我的項目已經被稱爲Ext.Net,而且我更喜歡使用Ext。網絡庫,如果它有辦法。 Thanx再次 – adopilot 2013-03-14 17:20:16