FastReport自定義數據源及ListView控件的使用


##1、想批量生成一堆物資信息卡,效果如下圖所示,fastreport可以一下全部生成,並且發現不用單獨寫東西,
##2、發現FastReport官方給出的Demo.exe很友好,基本可以滿足要求,想嘗試修改tree樹,直接加載自定義的報表,通過ILSpy查看Demo源碼,發現tree的數據源是Demos\Reports\reports.xml,修改reports.xml, 基本滿足要求,不用再動手開發
  1. <?xml version="1.0" encoding="utf-8"?>
    <Reports>
    <FolderName="Definition">
    <ReportFile="wz_barcode_one.frx"/>
    <ReportFile="wz_barcode_all.frx"/>
    </Folder>
    <FolderName="General">
    <ReportFile="Simple List.frx"/>

     

##3、想繼續完善,做的友好點,實現如下效果,用ListView顯示數據,根據用戶選擇,在打印數據,發現了兩個難點
###3.1 自定義用戶數據源的問題,網上百般查找和測試都無用,官方文檔、Demo也一一看了,可能在軟件中能實現,直接通過FastRepost來自定義數據源嗎,真是難。后來在官網上終於發現了有這個一個 FRNetProgrammerManual-en.pdf 這個文檔中 看到一個 Passing custom SQL的功能,最終經過測試,代碼如下,做報表,只要能自定義數據源,我想一切都不是問題了。
  1. try{
    TableDataSource dts =Report.GetDataSource("####")asTableDataSource;
    dts.SelectCommand="SELECT * FROM ### where WZID in ("+ss+")";
    // MessageBox.Show(dts.SelectCommand.ToString());
    dts.Init(); //不能少 關鍵
    }
    catch(Exception ee){
    MessageBox.Show(ee.Message.ToString());
    return;
    }

    ###3.2 關於ListView的使用,TextBox,grid,ComboBox,DataSelector都試了一遍,發現這些控件都是FastReport自帶的過濾控件只要綁定數據列,就能實現過濾,唯獨ListView沒這功能,也是各種測試都無果,后來只要定義了兩個數據源,一個數據源用來綁定ListView,一個用來綁定報表,至於綁定綁定報表的功能在這就起到數據字段的功能,最后通過自定義sql來決定數據源。

  ###3.3 關於ListView的使用 不知道Fastreport是不是抽風,控件的click事件均能生成和保存,但是其他事件比如 ItemChecked,初始的時候設置了,結果運行一次之后,事件值被自動清空了,不知道什么原因,后來通過 Form1_Load,強制注冊可解決
  1. privatevoidForm1_Load(object sender,EventArgs e){
    lv_BaseWZinfo.ItemChecked+= lv_BaseWZinfo_ItemChecked

     

  ###3.4 關於控件的DialogResult值的問題,發現只有設置為Ok時,才能在點擊button時跳轉至報表,如果設置為None,click事件會觸發,但不會顯示報表,設置為OK,不選擇任何東西也會跳轉至報表,最后折中通過默認將button的 DialogResult設置為None,發生選中時觸發為OK
  1. privatevoid lv_BaseWZinfo_ItemChecked(object sender,ItemCheckedEventArgs e)
    {
    if(e.Item.Checked){
    btnOk.DialogResult=DialogResult.OK;
    }
    }

     

  ###3.5 有想進一步改造Demo的可以通過ILSpy反編譯一下,進行修改


 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM