天天看點

水晶報表10 列印、導出按鈕不能用

  最近公司接了一個項目,要給客戶做許多報表,并且是中國式的報表,本人就用了c#+水晶報表10進行了開發,但是中間遇到了一個問題,” 動态設定水晶報表的資料源後,列印、導出、查找等按鈕不能用, 即使用水晶報表的工具欄時,出現的不是列印、導出、查找的結果,而是一張空白” 。出現這個問題挺郁悶的,于是在網上也查找了一番,但是網友們也都遇見到這個問題,都 沒有給出解決的辦法。無奈之下,本人專門研究了一番,最後 費了十牛三虎之力,終于找到了解決的辦法,下面列出來,以飨讀者,希望能給遇到此問題的朋友一定的幫助。   WEB 窗體中有兩個控件, CrystalReportViewer1   和   CrystalReportSource1 ,  資料源: Dataset 代碼 : protected CrystalDecisions.Web.CrystalReportViewer Crv; ReportDocument ReportDoc=new ReportDocument() ;      if (!IsPostBack) { SqlConnection sqlConnData=new SqlConnection(ConfigurationSettings.AppSettings["dsn"]) ;            sqlConnData.Open(); string str="select * from brigderoad where (station='"+UserStr+"') or (year='"+yearStr+"') "; // 查詢特定的表      SqlDataAdapter MyAdapter=new SqlDataAdapter (str,sqlConnData);      addressDS ds=new addressDS();      MyAdapter.Fill (ds,"brigderoad");// 綁定到資料源      string FilePath=Server.MapPath("report/bridgeCrR.rpt"); // 指定到特定的報表                 if (!ReportDoc.IsLoaded )         ReportDoc.Load(FilePath);      ReportDoc.SetDataSource(ds); Crv.ReportSource=ReportDoc;   } 上面就是常見的代碼,并且代碼不存在錯誤,那讀者要問了,上面沒有錯誤,但是到預覽報表時,要列印、導出、查找特定的頁面時為什麼還是空白頁面呢? 哈哈,下面将解決這個問題,請往下看 if (!IsPostBack) {  // } SqlConnection sqlConnData=new SqlConnection(ConfigurationSettings.AppSettings["dsn"]) ;                 sqlConnData.Open(); string str="select * from brigderoad where (station='"+UserStr+"') or (year='"+yearStr+"') "; // 查詢特定的表 SqlDataAdapter MyAdapter=new SqlDataAdapter (str,sqlConnData); addressDS ds=new addressDS(); MyAdapter.Fill (ds,"brigderoad");// 綁定到資料源 string FilePath=Server.MapPath("report/bridgeCrR.rpt"); // 指定到特定的報表            if (!ReportDoc.IsLoaded )       ReportDoc.Load(FilePath); ReportDoc.SetDataSource(ds); Crv.ReportSource=ReportDoc;     看到了吧,隻需要 if 語句後的代碼放在 if (!IsPostBack){ //} 的後面就可以了,呵呵,啰唆了那麼多,就這麼簡單。 Ispostback 訓示該頁是否正為響應用戶端回發而加載,或者它是否正被首次加載和通路,當執行完 if (!IsPostBack){ //} 之後有比訊把所查詢的表重新綁定資料源,這樣報表中有了資料,是以水晶報表的工具欄就可以用了。 總結 :   if (!IsPostBack){ //} 執行之後要把表重新綁定到資料源,這樣才不會錯誤。 

繼續閱讀