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

C# Winform實(shí)現(xiàn)導(dǎo)出DataGridView當(dāng)前頁(yè)以及全部數(shù)據(jù)

 更新時(shí)間:2023年07月18日 10:46:29   作者:Csharp 小記  
基本上,所有的業(yè)務(wù)系統(tǒng)都會(huì)要求有導(dǎo)出的功能,所以這篇文章主要為大家介紹了如何利用Winform實(shí)現(xiàn)原生DataGridView的導(dǎo)出功能,需要的可以參考一下

前言

基本上,所有的業(yè)務(wù)系統(tǒng)都會(huì)要求有導(dǎo)出的功能,很多人會(huì)選擇在每個(gè)列表頁(yè)加入導(dǎo)出按鈕進(jìn)行導(dǎo)出;其實(shí),個(gè)人感覺(jué)挺麻煩的。不知道有多少用過(guò)Dev控件的,Dev的GridView控件自帶導(dǎo)出功能有沒(méi)有覺(jué)得很好用?這一篇就動(dòng)手實(shí)現(xiàn)原生DataGridView的導(dǎo)出功能。

實(shí)現(xiàn)

1.新建一個(gè)自定義控件繼承自DataGridView,并在其中定義以下屬性

[Description("可導(dǎo)出的最大數(shù)量")]
public int ExportMaxCount { get; set; } = 5000;

2.由于是要讓DataGridView自帶導(dǎo)出控件,所以這里使用右鍵菜單來(lái)做,并在OnCreateControl事件中進(jìn)行導(dǎo)出的具體實(shí)現(xiàn)。

ContextMenuStrip contextMenuStrip = new ContextMenuStrip();
protected override void OnCreateControl()
{
    base.OnCreateControl();
    contextMenuStrip.Items.Add(new ToolStripMenuItem("導(dǎo)出當(dāng)前頁(yè)", null, (s, e) =>
            {
                if (Rows.Count == 0)
                {
                    FrmDialog.ShowMessage("沒(méi)有數(shù)據(jù)", "提示");
                    return;
                }
                SaveFileDialog saveFileDialog = new SaveFileDialog();
                saveFileDialog.Filter = "Excel文件|*.xlsx";
                if (saveFileDialog.ShowDialog() == DialogResult.OK)
                {
                    DataTable dt = new DataTable();
                    foreach (DataGridViewColumn column in Columns)
                    {
                        dt.Columns.Add(new DataColumn
                        {
                            ColumnName = column.DataPropertyName,
                            Caption = column.HeaderText
                        });
                    }
                    foreach (DataGridViewRow dr in Rows)
                    {
                        DataRow dataRow = dt.NewRow();
                        for (int i = 0; i < dt.Columns.Count; i++)
                        {
                            dataRow[i] = dr.Cells[i].Value;
                        }
                        dt.Rows.Add(dataRow);
                    }
                    ExcelUtils.Export(dt, saveFileDialog.FileName);
                    if (MessageBox.Show("導(dǎo)出成功,是否打開?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        Process.Start(saveFileDialog.FileName);
                    }
                }
            }));
            this.ContextMenuStrip = contextMenuStrip;

3.導(dǎo)出是使用NPOI來(lái)實(shí)現(xiàn)的,具體代碼如下,也可參考之前的導(dǎo)出文章

public static void Export(DataTable dataSource, string fileName)
        {
            IWorkbook workbook = new XSSFWorkbook();
            ISheet sheet = workbook.CreateSheet("sheet1");
            IRow rowHead = sheet.CreateRow(0);
            for (int j = 0; j < dataSource.Columns.Count; j++)
            {
                rowHead.CreateCell(j).SetCellValue(dataSource.Columns[j].Caption);
            }
            for (int i = 0; i < dataSource.Rows.Count; i++)
            {
                IRow row = sheet.CreateRow(i + 1);
                for (int j = 0; j < dataSource.Columns.Count; j++)
                {
                    row.CreateCell(j).SetCellValue(Convert.ToString(dataSource.Rows[i][j]));
                }
            }
            using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
            {
                workbook.Write(fs);
            }
            workbook.Close();
        }

4.到這里,其實(shí)就實(shí)現(xiàn)了一個(gè)公用的帶導(dǎo)出功能的DataGridView控件,但是我們一般都會(huì)對(duì)數(shù)據(jù)進(jìn)行分頁(yè)顯示,也會(huì)有導(dǎo)出全部的功能,這就要重新去獲取服務(wù)端的全部數(shù)據(jù)(這里也可以由后端直接生成提供下載地址)。所以我們?cè)诳丶行枰黾右粋€(gè)導(dǎo)出全部的事件,如果對(duì)事件進(jìn)行了注冊(cè)的話,可以在OnMouseDown事件中重新添加一個(gè)導(dǎo)出全部的右鍵菜單,并且可以觸發(fā)該事件。

public EventHandler ExportAllData;
protected override void OnMouseDown(MouseEventArgs e)
        {
            base.OnMouseDown(e);
            if (e.Button == MouseButtons.Right && ExportAllData != null && !contextMenuStrip.Items.ContainsKey("導(dǎo)出全部"))
            {
                contextMenuStrip.Items.Add(new ToolStripMenuItem("導(dǎo)出全部", null, ExportAllData, "導(dǎo)出全部"));
                this.ContextMenuStrip = contextMenuStrip;
            }
        }

最后調(diào)用的時(shí)候就在ExportAllData事件中進(jìn)行導(dǎo)出即可。

實(shí)現(xiàn)效果

到此這篇關(guān)于C# Winform實(shí)現(xiàn)導(dǎo)出DataGridView當(dāng)前頁(yè)以及全部數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Winform導(dǎo)出DataGridView數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#3.0使用EventLog類寫Windows事件日志的方法

    C#3.0使用EventLog類寫Windows事件日志的方法

    這篇文章主要介紹了C#3.0使用EventLog類寫Windows事件日志的方法,以簡(jiǎn)單實(shí)例形式分析了C#寫windows事件日志的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • c#調(diào)用c語(yǔ)言dll需要注意的地方

    c#調(diào)用c語(yǔ)言dll需要注意的地方

    這篇文章主要介紹了c#調(diào)用c語(yǔ)言dll需要注意的地方,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#中高效的多線程并行處理實(shí)現(xiàn)方式詳解

    C#中高效的多線程并行處理實(shí)現(xiàn)方式詳解

    在處理大型數(shù)據(jù)集時(shí),單線程處理往往成為性能瓶頸,所以本文將詳細(xì)介紹幾種高效的多線程并行處理實(shí)現(xiàn)方式,幫助開發(fā)者優(yōu)化數(shù)據(jù)處理流程,有需要的可以了解下
    2025-04-04
  • C#發(fā)送內(nèi)置圖片html格式郵件的方法

    C#發(fā)送內(nèi)置圖片html格式郵件的方法

    這篇文章主要介紹了C#發(fā)送內(nèi)置圖片html格式郵件的方法,涉及C#發(fā)送郵件的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • Winform自定義控件在界面拖動(dòng)、滾動(dòng)鼠標(biāo)時(shí)閃爍的解決方法

    Winform自定義控件在界面拖動(dòng)、滾動(dòng)鼠標(biāo)時(shí)閃爍的解決方法

    這篇文章介紹了Winform自定義控件在界面拖動(dòng)、滾動(dòng)鼠標(biāo)時(shí)閃爍的解決方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • 詳解WPF的InkCanvas選擇模式

    詳解WPF的InkCanvas選擇模式

    這篇文章主要介紹了WPF InkCanvas選擇模式的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c# wpf,感興趣的朋友可以了解下
    2021-04-04
  • C#中重載與重寫區(qū)別分析

    C#中重載與重寫區(qū)別分析

    這篇文章主要為大家詳細(xì)介紹了C#中重載與重寫的區(qū)別,感興趣的小伙伴們可以參考一下
    2016-02-02
  • C#七大經(jīng)典排序算法系列(下)

    C#七大經(jīng)典排序算法系列(下)

    這篇文章主要為大家詳細(xì)介紹了C#七大經(jīng)典排序算法系列下篇,直接插入排序,希爾排序和歸并排序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • C#根據(jù)身份證號(hào)碼判斷出生日期和性別

    C#根據(jù)身份證號(hào)碼判斷出生日期和性別

    這篇文章主要為大家詳細(xì)介紹了C#根據(jù)身份證號(hào)碼判斷出生日期和性別的方法,感興趣的小伙伴們可以參考一下
    2016-08-08
  • C#讀取本地網(wǎng)絡(luò)配置信息全攻略分享

    C#讀取本地網(wǎng)絡(luò)配置信息全攻略分享

    在當(dāng)今數(shù)字化時(shí)代,網(wǎng)絡(luò)已深度融入我們生活與工作的方方面面,對(duì)于軟件開發(fā)而言,掌握本地計(jì)算機(jī)的網(wǎng)絡(luò)配置信息顯得尤為關(guān)鍵,而在 C# 編程的世界里,我們又該如何巧妙地讀取這些至關(guān)重要的本地網(wǎng)絡(luò)配置信息呢?接下來(lái),就讓我們一同踏上探索之旅
    2025-01-01

最新評(píng)論

上饶县| 盐亭县| 天津市| 卢氏县| 秦安县| 阿拉善左旗| 双鸭山市| 郎溪县| 靖远县| 镶黄旗| 杭锦旗| 泊头市| 社会| 托克逊县| 武义县| 潍坊市| 宜阳县| 福鼎市| 南通市| 东乌珠穆沁旗| 会昌县| 上蔡县| 宝应县| 高雄县| 阳曲县| 香格里拉县| 阿瓦提县| 道孚县| 泸溪县| 赤水市| 霞浦县| 杭锦旗| 湘潭市| 德惠市| 钟山县| 连云港市| 玉门市| 大庆市| 金沙县| 乌审旗| 临清市|