最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Winform項(xiàng)目中使用FastReport.Net報(bào)表控件

 更新時(shí)間:2022年06月07日 16:34:39   作者:springsnow  
這篇文章介紹了Winform項(xiàng)目中使用FastReport.Net報(bào)表控件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、基本使用

1、準(zhǔn)備工程和引入控件

1、下載、安裝FastReport

這一步很簡(jiǎn)單,大家在其中文網(wǎng)站上下載最新版的demo版就可以了,直接安裝就可以

替換破解文件:

Replace C:\Windows\Microsoft.NET\assembly\GAC_MSIL\FastReport\v4.0_2019.1.5.0__00000000000000000000000000\FastReport.dll with cracked one.

Assemblies from folders Framework X.0 is PublicKeyToken removed and strong name verification disabled.

安裝之后大家會(huì)發(fā)現(xiàn),VS里面什么都沒(méi)有,不像有些插件直接會(huì)在ToolBox里顯示,這里需要我們自己引入

2、準(zhǔn)備工程、引入控件

首先我們使用VS新建一個(gè)WinForm工程,這里我使用的是VisualStutio2015版本

接著我們先引入FastReport的核心dll依賴,這些文件的目錄在FastReport安裝目錄下,分別是FastReport.dll,FastReport.Editor.dll,FastReport.Bars.dll。

你可以使用Framework 4.0下的dll文件

接著我們需要3個(gè)窗體:MainForm,DesignForm,PreviewForm,其中MainForm為啟動(dòng)頁(yè)面

現(xiàn)在我們需要在ToolsBox中引入我們需要的FastReport控件,首先我們?cè)赥oolsBox中新建一個(gè)Item,命名為FastReport

然后右鍵剛剛新建的選項(xiàng)卡->選擇項(xiàng),打開(kāi)選擇控件的對(duì)話框

然后我們點(diǎn)擊左下角的瀏覽,選擇剛剛的FastReport.dll,然后確定,之后再確定,就會(huì)成功導(dǎo)入以下新的控件

3、啟動(dòng)頁(yè)設(shè)計(jì)

MainForm很簡(jiǎn)單,我們就放兩個(gè)按鈕,一個(gè)設(shè)計(jì),一個(gè)瀏覽,分別打開(kāi)兩個(gè)窗口

事件

private void btnDesign_Click(object sender, EventArgs e)
{
    DesignForm dForm = new DesignForm();
    dForm.Show();

}

private void btnPreview_Click(object sender, EventArgs e)
{
    PreviewForm pForm = new PreviewForm();
    pForm.Show();
}

2、使用控件搭建窗體

1、準(zhǔn)備一個(gè)FastReport報(bào)表

使用安裝時(shí)我們的設(shè)計(jì)工具設(shè)計(jì)一張最簡(jiǎn)單的報(bào)表

設(shè)計(jì)的報(bào)表,只有一個(gè)文字框

將這份報(bào)表保存到工程文件/bin/Debug/Report下

2、引入Preview控件

我們?cè)赑reviewForm中,將PreviewControl控件拖入窗體,將窗體拉大一點(diǎn),然后將控件的Dock設(shè)為Fill

然后我們F5測(cè)試一下看看是什么效果

我們發(fā)現(xiàn)控件被正確的顯示出來(lái)了

那怎么才能看到我們報(bào)表呢,我們需要用代碼來(lái)加載,我們雙擊Form,新建Load函數(shù),打下面的代碼

using FastReport;//引入FastReport
using System;
using System.Windows.Forms;

namespace ReportDemo
{
    public partial class PreviewForm : Form
    {
        private Report pReport; //新建一個(gè)私有變量

        public PreviewForm()
        {
            InitializeComponent();
        }

        private void PreviewForm_Load(object sender, EventArgs e)
        {
            pReport = new Report();   //實(shí)例化一個(gè)Report報(bào)表
            String reportFile = "Report/report.frx";
            pReport.Load(reportFile);  //載入報(bào)表文件
            pReport.Preview = previewControl1; //設(shè)置報(bào)表的Preview控件(這里的previewControl1就是我們之前拖進(jìn)去的那個(gè))
            pReport.Prepare();   //準(zhǔn)備
            pReport.ShowPrepared();  //顯示
        }
    }
}

我們?cè)貴5一下,載入了報(bào)表文件的樣子

這里我們已經(jīng)可以預(yù)覽我們的報(bào)表了 但是在我們的需求中,用戶還需要自定義報(bào)表的內(nèi)容和格式呢,我們下一步就在實(shí)現(xiàn)報(bào)表設(shè)計(jì)器

3、引入Design控件

我們像Preview那樣把Design控件拖進(jìn)DesignForm,然后Dock設(shè)為Fill

然后我們來(lái)寫(xiě)怎么樣吧設(shè)計(jì)器綁定Report文件,雙擊新建Load函數(shù),引入FastReport,新建一個(gè)private變量

using FastReport;
using System;
using System.Windows.Forms;

namespace ReportDemo
{
    public partial class DesignForm : Form
    {
        private Report dReport;

        public DesignForm()
        {
            InitializeComponent();
        }

        private void DesignForm_Load(object sender, EventArgs e)
        {
            dReport = new Report();
            string reportFile = "Report/report.frx";
            dReport.Load(reportFile);
            this.designerControl1.Report = dReport;
            dReport.Prepare();
            dReport.Design();
        }
    }
}

我們F5一下

成功!

3、綁定數(shù)據(jù)

1、數(shù)據(jù)庫(kù)準(zhǔn)備

我們使用VisualStudio自帶的mdf文件數(shù)據(jù)庫(kù),首先我們?cè)诠こ讨袆?chuàng)建一個(gè)文件夾APP_DATA,在此文件夾中創(chuàng)建一個(gè)mdf文件

然后我們可以在服務(wù)器資源管理器中看到我們的數(shù)據(jù)庫(kù)

然后我們右鍵表新建一個(gè)表

CREATE TABLE [dbo].[T_students]
(
    [Id] INT NOT NULL PRIMARY KEY IDENTITY, 
    [no] NCHAR(50) NULL, 
    [name] NCHAR(50) NULL, 
    [school] NCHAR(50) NULL, 
    [class] NCHAR(50) NULL
)

然后在設(shè)計(jì)器左上角點(diǎn)擊更新按鈕,在彈出的窗口中點(diǎn)擊更新數(shù)據(jù)庫(kù)

更狀態(tài)全部打鉤之后,表就創(chuàng)建好了,我們刷新服務(wù)器資源管理器,然后打開(kāi)表數(shù)據(jù),添加一些數(shù)據(jù)進(jìn)去

ok我們現(xiàn)在在服務(wù)器資源管理器里面選擇mdf文件,在屬性列表里,找到連接字符串,拷貝一份出來(lái),等會(huì)需要用的到

Data Source=(LocalDB)\v11.0;AttachDbFilename="D:\Personal\Documents\Visual Studio 2012\Projects\WindowsFormsApplication3\WindowsFormsApplication3\APP_DATA\Database1.mdf";Integrated Security=True

2、設(shè)計(jì)器數(shù)據(jù)獲取

我們?cè)贒esignForm.cs里,寫(xiě)一個(gè)方法getData()

private DataSet getData()
{
    String connStr = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=D:\Personal\Documents\Visual Studio 2012\Projects\WindowsFormsApplication3\WindowsFormsApplication3\APP_DATA\Database1.mdf;Integrated Security=True";
    SqlConnection conn = new SqlConnection(connStr);
    conn.Open();
    String sqlStr = "SELECT * FROM T_students";
    SqlCommand comm = new SqlCommand();
    comm.CommandText = sqlStr;
    comm.CommandType = CommandType.Text;
    comm.Connection = conn;
    DataSet ds = new DataSet();
    SqlDataAdapter adapter = new SqlDataAdapter(comm);
    adapter.Fill(ds, "學(xué)生信息");
    conn.Close();
    return ds;
}

然后我們?cè)贔orm_Load方法里綁定數(shù)據(jù)集

private void DesignForm_Load(object sender, EventArgs e)
{
    dReport = new Report();
    string reportFile = "Report/report.frx";
    dReport.Load(reportFile);
    this.designerControl1.Report = dReport;

    DataSet ds = new DataSet();
    ds = getData();
    dReport.RegisterData(ds, "學(xué)生信息");
    dReport.Prepare();
    dReport.Design();
}

我們F5一下,在設(shè)計(jì)窗口下,在[數(shù)據(jù)]->[選擇數(shù)據(jù)源]中,就能看到我們綁定的數(shù)據(jù)了

我們?cè)O(shè)計(jì)一個(gè)表格,把我們的數(shù)據(jù)放進(jìn)去

我們可以預(yù)覽一下,然后保存

3、為Preview綁定數(shù)據(jù)

現(xiàn)在我們用同樣的方法為Preview綁定數(shù)據(jù),getData()方法一致,可以直接復(fù)制過(guò)來(lái)

private void PreviewForm_Load(object sender, EventArgs e)
{
    pReport = new Report();   //實(shí)例化一個(gè)Report報(bào)表
    String reportFile = "Report/report.frx";
    pReport.Load(reportFile);  //載入報(bào)表文件
    pReport.Preview = previewControl1; //設(shè)置報(bào)表的Preview控件(這里的previewControl1就是我們之前拖進(jìn)去的那個(gè))
    DataSet ds = new DataSet();
    ds = getData();
    pReport.RegisterData(ds, "學(xué)生信息");
    pReport.Prepare();   //準(zhǔn)備
    pReport.ShowPrepared();  //顯示
}

我們測(cè)試一下

二、用戶自定義報(bào)表,可保存到服務(wù)器和打開(kāi)。

摘自官方Demo:

調(diào)用設(shè)計(jì)器界面

首頁(yè)代碼

public partial class Form1 : Form
{
    private DataSet FReportsDs;

    private DataTable ReportsTable
    {
        get { return FReportsDs.Tables[0]; }
    }

    public Form1()
    {
        InitializeComponent();
    }

    private void InitializeDatabase()
    {
        FReportsDs = new DataSet();
        FReportsDs.ReadXml(Config.ApplicationFolder + @"..\..\database.xml");
    }

    private void FinalizeDatabase()
    {
        FReportsDs.WriteXml(Config.ApplicationFolder + @"..\..\database.xml", XmlWriteMode.WriteSchema);
    }

    private void WireupDesignerEvents()
    {
        Config.DesignerSettings.CustomOpenDialog += new OpenSaveDialogEventHandler(DesignerSettings_CustomOpenDialog);
        Config.DesignerSettings.CustomOpenReport += new OpenSaveReportEventHandler(DesignerSettings_CustomOpenReport);
        Config.DesignerSettings.CustomSaveDialog += new OpenSaveDialogEventHandler(DesignerSettings_CustomSaveDialog);
        Config.DesignerSettings.CustomSaveReport += new OpenSaveReportEventHandler(DesignerSettings_CustomSaveReport);
    }

    private void DesignReport()
    {
        using (Report report = new Report())
        {
            report.LoadBaseReport += new CustomLoadEventHandler(report_LoadBaseReport);
            report.Design();
        }
    }

    // this event is fired when loading a base part of an inherited report.
    private void report_LoadBaseReport(object sender, CustomLoadEventArgs e)
    {
        OpenReport(e.Report, e.FileName);
    }

    // this event is fired when the user press the "Open file" button
    private void DesignerSettings_CustomOpenDialog(object sender, OpenSaveDialogEventArgs e)
    {
        using (OpenDialogForm form = new OpenDialogForm())
        {
            // pass the reports table to display a list of reports
            form.ReportsTable = ReportsTable;

            // show dialog
            e.Cancel = form.ShowDialog() != DialogResult.OK;

            // return the selected report in the e.FileName
            e.FileName = form.ReportName;
        }
    }

    // this event is fired when report needs to be loaded
    private void DesignerSettings_CustomOpenReport(object sender, OpenSaveReportEventArgs e)
    {
        OpenReport(e.Report, e.FileName);
    }

    // this event is fired when the user press the "Save file" button to save untitled report,
    // or "Save file as" button
    private void DesignerSettings_CustomSaveDialog(object sender, OpenSaveDialogEventArgs e)
    {
        using (SaveDialogForm form = new SaveDialogForm())
        {
            // show dialog
            e.Cancel = form.ShowDialog() != DialogResult.OK;

            // return the report name in the e.FileName
            e.FileName = form.ReportName;
        }
    }

    // this event is fired when report needs to be saved
    private void DesignerSettings_CustomSaveReport(object sender, OpenSaveReportEventArgs e)
    {
        SaveReport(e.Report, e.FileName);
    }

    private void OpenReport(Report report, string reportName)
    {
        // find the datarow with specified ReportName
        foreach (DataRow row in ReportsTable.Rows)
        {
            if ((string)row["ReportName"] == reportName)
            {
                // load the report from a stream contained in the "ReportStream" datacolumn
                byte[] reportBytes = (byte[])row["ReportStream"];
                using (MemoryStream stream = new MemoryStream(reportBytes))
                {
                    report.Load(stream);
                }
                return;
            }
        }
    }

    private void SaveReport(Report report, string reportName)
    {
        // find the datarow with specified ReportName
        DataRow reportRow = null;

        foreach (DataRow row in ReportsTable.Rows)
        {
            if ((string)row["ReportName"] == reportName)
            {
                reportRow = row;
                break;
            }
        }

        // no existing row found, append new one
        if (reportRow == null)
        {
            reportRow = ReportsTable.NewRow();
            ReportsTable.Rows.Add(reportRow);
        }

        // save the report to a stream, then put byte[] array to the datarow
        using (MemoryStream stream = new MemoryStream())
        {
            report.Save(stream);

            reportRow["ReportName"] = reportName;
            reportRow["ReportStream"] = stream.ToArray();
        }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        InitializeDatabase();
        WireupDesignerEvents();
    }

    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        FinalizeDatabase();
    }

    private void btnDesign_Click(object sender, EventArgs e)
    {
        DesignReport();
    }
}

打開(kāi)對(duì)話框:

public partial class OpenDialogForm : Form
{
    public DataTable ReportsTable
    {
        set
        {
            // fill the listbox with names of reports
            foreach (DataRow row in value.Rows)
            {
                lbxReports.Items.Add(row["ReportName"]);
            }
        }
    }

    public string ReportName
    {
        get
        {
            return (string)lbxReports.SelectedItem;
        }
    }

    public OpenDialogForm()
    {
        InitializeComponent();
    }

    private void lbxReports_SelectedIndexChanged(object sender, EventArgs e)
    {
        btnOK.Enabled = !String.IsNullOrEmpty(ReportName);
    }
}

保存對(duì)話框

public partial class SaveDialogForm : Form
{
    public string ReportName
    {
        get
        {
            return tbReportName.Text;
        }
    }

    public SaveDialogForm()
    {
        InitializeComponent();
    }

    private void tbReportName_TextChanged(object sender, EventArgs e)
    {
        btnOK.Enabled = !String.IsNullOrEmpty(ReportName);
    }
}

參考:使用report.ReportResourceString在數(shù)據(jù)庫(kù)中保存FastReport.Net報(bào)表

http://m.fzitv.net/article/250713.htm

控件下載

點(diǎn)此下載

到此這篇關(guān)于Winform項(xiàng)目中使用FastReport.Net報(bào)表控件的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#操作excel打印的示例

    C#操作excel打印的示例

    這篇文章主要介紹了C#操作excel打印的示例,幫助大家利用c#打印表格,提高辦公效率,感興趣的朋友可以了解下
    2020-10-10
  • C#使用OpenCv圖像批處理并改變圖片大小并且重命名

    C#使用OpenCv圖像批處理并改變圖片大小并且重命名

    這篇文章主要介紹了C#使用OpenCv圖像批處理并改變圖片大小并且重命名,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C#獲取本機(jī)IP地址和Mac地址的方法

    C#獲取本機(jī)IP地址和Mac地址的方法

    這篇文章主要介紹了C#獲取本機(jī)IP地址和Mac地址的方法,實(shí)例分析了C#網(wǎng)絡(luò)功能的基本技巧,需要的朋友可以參考下
    2015-05-05
  • 學(xué)會(huì)使用C#異常

    學(xué)會(huì)使用C#異常

    在C#中,程序中在運(yùn)行時(shí)出現(xiàn)的錯(cuò)誤,會(huì)不斷在程序中進(jìn)行傳播,這種機(jī)制稱為“異?!?。 異常通常由錯(cuò)誤的代碼引發(fā),并由能夠更正錯(cuò)誤的代碼進(jìn)行catch。本文將對(duì)C#異常簡(jiǎn)要分析說(shuō)明,下面就跟著小編一起來(lái)看下吧
    2016-12-12
  • 詳解C#中的字符串拼接@ $

    詳解C#中的字符串拼接@ $

    這篇文章主要介紹了C#中的字符串拼接@,$的相關(guān)知識(shí),代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • HttpWebRequest實(shí)現(xiàn)下載圖片至本地

    HttpWebRequest實(shí)現(xiàn)下載圖片至本地

    這篇文章主要為大家詳細(xì)介紹了HttpWebRequest實(shí)現(xiàn)下載圖片至本地,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • C#多線程之Parallel類的用法

    C#多線程之Parallel類的用法

    這篇文章介紹了C#多線程之Parallel類的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C# 泛型字典 Dictionary的使用詳解

    C# 泛型字典 Dictionary的使用詳解

    本文主要介紹了C# 泛型字典 Dictionary的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C# Winform實(shí)現(xiàn)自定義分頁(yè)控件

    C# Winform實(shí)現(xiàn)自定義分頁(yè)控件

    一些第三方的分頁(yè)控件要么就是界面不夠美觀大方,要么就是使用起來(lái)感覺(jué)很麻煩,所以本文就為大家介紹一下如何利用Winform自定義分頁(yè)控件,需要的可以參考一下
    2023-07-07
  • C#中的日期時(shí)間比較和格式化的方法

    C#中的日期時(shí)間比較和格式化的方法

    本文將介紹C#中常用的日期時(shí)間比較方法(CompareTo、Equals和比較運(yùn)算符)以及日期時(shí)間格式化方法(ToString、自定義格式字符串和標(biāo)準(zhǔn)格式),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10

最新評(píng)論

抚远县| 通化县| 乐亭县| 贵阳市| 楚雄市| 鹤峰县| 普兰店市| 金秀| 江西省| 大关县| 永修县| 封开县| 尼勒克县| 黄平县| 株洲市| 格尔木市| 正蓝旗| 铁岭县| 玉田县| 新河县| 康保县| 大足县| 五莲县| 云梦县| 枣阳市| 屏东县| 新巴尔虎左旗| 屏边| 蒙城县| 庆元县| 东港市| 郸城县| 修文县| 杭州市| 嘉祥县| 揭阳市| 颍上县| 新干县| 平昌县| 仪陇县| 明星|