在crystalReport(水晶報表)動態輸入參數(轉)
2024-07-21 02:23:53
供稿:網友
命名空間為:using crystaldecisions.shared
private void buildreportviewerparameters(crystaldecisions.web.crystalreportviewer rptviewer, hashtable paramtable)
{
//定義報表視圖的參數的方法
parameterfields paramfields = new parameterfields();
foreach (object key in paramtable.keys)
{
parameterfield paramfield = new parameterfield();
parametervalues paramvalues = new parametervalues();
parameterdiscretevalue paramvalue = new parameterdiscretevalue();
paramvalue.value = paramtable[key].tostring();
paramvalues.add(paramvalue);
paramfield.parameterfieldname = key.tostring();
paramfield.currentvalues = paramvalues;
paramfields.add(paramfield);
}
rptviewer.parameterfieldinfo = paramfields;
}
private void buildreportclassparameters(crystaldecisions.crystalreports.engine.reportclass rpt, hashtable paramtable)
{
//定義報表類的參數的方法
foreach (object key in paramtable.keys)
{
parametervalues paramvalues = new parametervalues();
parameterdiscretevalue paramvalue = new parameterdiscretevalue();
paramvalue.value = paramtable[key].tostring();
paramvalues.add(paramvalue);
rpt.datadefinition.parameterfields[key.tostring()].applycurrentvalues(paramvalues);
}
}
protected void buildreportparameters(crystaldecisions.web.crystalreportviewer rpt,hashtable paramtable)
{
//定義報表參數的方法
parameterfields paramfields = new parameterfields();
foreach(object key in paramtable.keys)
{
parameterfield paramfield;
parametervalues paramvalues;
parameterdiscretevalue paramvalue;
paramfield = new parameterfield();
paramvalues = new parametervalues();
paramvalue = new parameterdiscretevalue();
paramvalue.value = (string)paramtable[key];
paramvalues.add(paramvalue);
paramfield.parameterfieldname=(string)key;
paramfield.currentvalues = paramvalues;
paramfields.add(paramfield);
}
rpt.parameterfieldinfo = paramfields;
}
然后再你的需要調用參數的地方,加如下引用:
private void button_output_click(object sender, system.eventargs e)
{
crystaldecisions.shared.tablelogoninfo loginfo = new crystaldecisions.shared.tablelogoninfo(); //設置報表的登錄信息
loginfo.connectioninfo.servername = "angel"; //設置報表與庫的連接信息
loginfo.connectioninfo.databasename = "kaoqin";
loginfo.tablename = "emstatistic";
loginfo.connectioninfo.userid = "sa";
loginfo.connectioninfo.password = "";
crystalreportviewer1.reportsource = server.mappath("cr_aa.rpt"); //指定報表的數據源
crystalreportviewer1.logoninfo.add(loginfo);//對參數進行賦什值
// crystalreportviewer1.databind();
//聲明變量并獲取導出選項
cr_aa myreport = new cr_aa(); //定義一個名為myreport的報表
myreport.database.tables[0].applylogoninfo(loginfo);
crystalreportviewer1.reportsource = myreport;
crystalreportviewer1.databind();
hashtable t = new hashtable();
t.add("p_st_month", textmonth.text); //為參數賦值
buildreportparameters(crystalreportviewer1, t); //調用建立報表參數的方法
buildreportviewerparameters(crystalreportviewer1, t); //給報表瀏覽器添加參數
buildreportclassparameters(myreport, t); //給報表類添加參數
crystaldecisions.shared.diskfiledestinationoptions diskopts = new crystaldecisions.shared.diskfiledestinationoptions();
//設置導出格式
myreport.exportoptions.exportdestinationtype = crystaldecisions.shared.exportdestinationtype.diskfile;
myreport.exportoptions.exportformattype = crystaldecisions.shared.exportformattype.excel;
//設置磁盤文件選項
diskopts.diskfilename = "c://documents and settings//administrator//my documents//kaoqin_rpt.xls";
myreport.exportoptions.destinationoptions = diskopts;
myreport.export();
response.write("<script language='javascript'>alert('您已經將報表成功輸出到excel文件'); window.location.href='customrpt.aspx';</" + "script>");
}