C#/。Net 4.0,VS2013: 我在aspx页面中有3个选项卡控件(div标签中的tabpanel),每个控件包含一个ReportViewer控件,下面是示例代码。我将标签ID通过PageMethods传递给后面的代码,因为'onserverclick'对我不起作用。我根据单击的选项卡获取tabid。基于tabid,我在选项卡中填写了相应的报告。
<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist" id="reportTabs" runat="server" >
<li role="presentation" id="tab1" class="active" runat="server" ><a href="#tab1" aria-controls="tab1" role="tab" data-toggle="tab" >Tab 1</a></li>
<li role="presentation" id="tab2" runat="server" ><a href="#tab2" aria-controls="tab2" role="tab" data-toggle="tab" >Tab 2</a></li>
<li role="presentation" id="tab2" runat="server"><a href="#tab2" aria-controls="tab3" role="tab" data-toggle="tab" >Tab 3</a></li>
</ul>`
<div role="tabpanel" class="tab-pane" id="rep1" runat="server">
<asp:UpdatePanel>
<ContentTemplate>
<rsweb:ReportViewer ID="rv1" runat="server"
Width="100%" Height="100%"
WaitMessageFont-Size="14pt" PageCountMode="Actual" AsyncRendering="false"
SizeToReportContent="true"
ShowPrintButton="False" >
</rsweb:ReportViewer>
</ContentTemplate>
</asp:UpdatePanel>
</div>
由于PageMethods必须是一个静态方法,我无法将所有方法转换为静态,我创建了同一个类的Singleton对象。在Page_Load中,我将报告ID分配给此单例实例的报告ID。我可以看到rdlc报告路径。到目前为止很好。
private static Reports instance = new Reports();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.rv1.LocalReport.ReportPath = "Report1.rdlc";
instance.rv1 = this.rv1;
}
}
在另一种方法中,当我添加DataSource时,rv1变为null。
instance.rv1.LocalReport.DataSources.Add(rds); // rv1 is null.
我做错了什么。任何其他方法来实现这一目标。
这是WebMethod:
public static TabChanged(string liElement)//object sender, EventArgs e)
{
switch (liElement)
{
case "cpContent_tab3":
break;
case "cpContent_tab1":
instance.PopulateRep1();
break;
case "cpContent_tab2":
instance.PopulateRep2();
break;
}
}
protected void PopulateRep1()
{
dt = GetReportDetails();
if (dt != null)
{
ReportDataSource rds = new ReportDataSource("RepSummary", dt);
// instance.rv1.LocalReport.ReportPath = "Rep1.rdlc";
Instance.rv1.LocalReport.DataSources.Clear();
instance.rv1.LocalReport.DataSources.Add(rds);
}
}
感谢您的任何帮助。
答案 0 :(得分:0)
我会备份并整理出'onserverclick'问题。这将触发回发。这很关键,因为它会将您的webform和viewstate发布回服务器,以便您可以按照自己的方式与服务器上的那些控件进行交互。
当您执行该回发时,页面的视图状态将被发送回服务器。然后服务器将“知道”页面上控件的状态,然后它就可以操作它们。
这可能是一件很小的事情,你可以解决这个问题,让你的点击事件无法解雇。一旦你得到修复,剩下的就会到位。但你不能“绕过”那个并找到另一种与这些服务器控件交互的方式。没有一个。