经过一年多努力,本月底项目进入试运行.在本次项目中使用SqlServer Reporting Service作为报表开发的工具,现将操作记录在此,无论报表还是单证其展示方式一般分为两种:
1、 在页面中某个区域直接显示
2、 点击某个按钮触发后弹出新窗口显示
为此基类ApplicationBasePage.cs页面提供了如下两个方法
/**/
/// <summary>
/// 得到报表窗口的URL
/// </summary>
/// <param name="reportCode">报表代码,如rp_pr_qa_001</param>
/// <param name="paraName">参数名称数组,与参数值数组对应</param>
/// <param name="paraValue">参数值数组,与参数名称数组对于</param>
/// <param name="viewFormat">显示格式代码,0:显示参数、工具栏,1:不显示参数、显示工具栏,2:不显示参数、工具栏</param>
protected
string
GetReportUrl(
string
reportCode,
string
[] paraName,
string
[] paraValue,
int
viewFormat)

...
{
//报表的基础地址
//string reportingServerUrlBase = "http://10.3.130.72/ReportServer?/BpmsReports/";//ReportServer
string reportingServerUrlBase = ConfigurationManager.AppSettings["ReportServer"].ToString();
//参数拼接
string paras = "";
int paraCount = paraName.Length;
if (paraValue.Length < paraCount)
paraCount = paraValue.Length;
for (int i = 0; i < paraCount; i++)

...{
paras += "&" + paraName[i] + "=" + Server.UrlEncode(paraValue[i]);
}
//显示格式
string format = "";
switch (viewFormat)

...{
case 0:
format = "&rc:toolbar=true&rc:parameters=true&rc:Zoom=Page%20Width";
break;
case 1:
format = "&rc:toolbar=true&rc:parameters=false&rc:Zoom=Page%20Width";
break;
case 2:
format = "&rc:toolbar=false&rc:parameters=false&rc:Zoom=Page%20Width";
break;
default:
format = "&rc:toolbar=true&rc:parameters=true&rc:Zoom=Page%20Width";
break;
}
//组织最终报表URL
string reportUrl = reportingServerUrlBase + reportCode + paras + format;

return reportUrl;
}
/**/
/// <summary>
/// 打开报表窗口
/// </summary>
/// <param name="reportCode">报表代码,如rp_pr_qa_001</param>
/// <param name="paraName">参数名称数组,与参数值数组对应</param>
/// <param name="paraValue">参数值数组,与参数名称数组对于</param>
/// <param name="viewFormat">显示格式代码,暂时只有两种,0:显示title,1:不显示title</param>
protected
void
PopUpReport(
string
reportCode,
string
[] paraName,
string
[] paraValue,
int
viewFormat)

...
{
//获得报表地址
string reportUrl = GetReportUrl(reportCode, paraName, paraValue, viewFormat);

//弹出报表窗口
StringBuilder MyBuilder = new StringBuilder();
MyBuilder.Append("<script language='javascript'>");
MyBuilder.Append("{open('" + reportUrl + "','aa','width='+screen.width+' height='+screen.height+' top=0 left=0 toolbar=no menubar=no resizable=yes status=yes');}");
MyBuilder.Append("</script>");
this.Page.ClientScript.RegisterStartupScript(this.GetType(), "open", MyBuilder.ToString());
}
调用事例
1.在页面中某个区域直接显示
合同号
<
asp:TextBox
ID
="TextBox1"
runat
="server"
></
asp:TextBox
>
<
asp:Button
ID
="btnViewReportInPage"
runat
="server"
Text
="页内显示报表"
OnClick
="btnViewReportInPage_Click"
/>
<
asp:Button
ID
="btnViewReportOutPage"
runat
="server"
Text
="弹出页显示报表"
OnClick
="btnViewReportOutPage_Click"
/>
<
br
/>
<
iframe
id
="RptFrame"
runat
="server"
width
="100%"
height
="500"
></
iframe
>
protected
void
btnViewReportInPage_Click(
object
sender, EventArgs e)

...
{
string reportCode = "rp_pr_qa_136";

string[] paraName = new string[] ...{"ContractNoSys"};
string[] paraValue = new string[1];
paraValue[0] = TextBox1.Text;
ReportURL = GetReportUrl(reportCode, paraName, paraValue, 1);
RptFrame.Attributes.Add("src", ReportURL);
}
2.点击某个按钮触发后弹出新窗口显示
protected
void
btnViewReportOutPage_Click(
object
sender, EventArgs e)

...
{
string reportCode = "rp_pr_qa_136";

string[] paraName = new string[] ...{ "ContractNoSys" };
string[] paraValue = new string[1];
paraValue[0] = TextBox1.Text;
PopUpReport(reportCode, paraName, paraValue, 1);
}