C#编程学习18:使用多文档窗体框架利用DataGridView对Access数据表进行增删改及导出excel操作

简介: C#编程学习18:使用多文档窗体框架利用DataGridView对Access数据表进行增删改及导出excel操作

1 控件准备

创建winform窗体,并将其IsMdiContainer属性设置为true

1.1 Mdi窗体空间及设置

(1)RibbonControl控件

Navigation & Layout下添加RibbonControl控件2019052020374842.png

(2)按钮添加

添加按钮barbtn_database,Caption = “数据库处理”;


1.2 数据库处理子窗体

添加名称为dataBase的窗体

添加dataGridView控件,属性设置如下:


image.png


添加panel控件,设置Anchor属性为Top, Bottom, Left, Right

在panel控件上拖拽四个button控件,


image.png


2 实现代码

2.1 名称空间引用


添加名称空间引用:using System.Data.OleDb; //连接Access数据库使用


添加名称空间引用:using System.Threading; //导出到excel使用


添加名称空间引用:using Excel = Microsoft.Office.Interop.Excel;


201905202129443.png


2.2 全局变量定义

数据库链接字符串全局变量:


 string connectStr= @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=你的数据库mdb文件路径\Database1.mdb";

存放数据的中介变量

System.Data.DataTable dt = new System.Data.DataTable(); //注:此处与Excel的名称空间冲突,故使用全名

2.3 在窗体Load事件中添加代码显示数据

        //加载数据库
        private void dataBase_Load(object sender, EventArgs e)
        {
            OleDbConnection connection = new OleDbConnection(connectStr);
            connection.Open();
            OleDbCommand cmd = connection.CreateCommand();
            cmd.CommandText = "select * from fruit";
            OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
            DataSet ds = new DataSet();
            adapter.Fill(ds);
            dt = ds.Tables[0];
            dataGridView1.DataSource = dt;
            connection.Close();
            cmd.Dispose();
            connection.Dispose();
        }

2.4 数据库更新代码

//更新数据到数据库中
   private void btn_updataToDatabase_Click(object sender, EventArgs e)
        {
            OleDbConnection connection = new OleDbConnection(connectStr);
            connection.Open();
            OleDbCommand cmd = connection.CreateCommand();
            cmd.CommandText = "select * from fruit";
            OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
            OleDbCommandBuilder cmdBulid = new OleDbCommandBuilder(adapter);
            adapter.DeleteCommand = cmdBulid.GetDeleteCommand();
            adapter.InsertCommand = cmdBulid.GetInsertCommand();
            adapter.UpdateCommand = cmdBulid.GetUpdateCommand();
            adapter.Update((System.Data.DataTable)dataGridView1.DataSource);
            adapter.Dispose();
            cmdBulid.Dispose();
            cmd.Dispose();
            connection.Dispose();
        }

2.5 删除DataGridView数据记录代码

        //删除dataGridView中的记录
        private void btn_deleteDataItem_Click(object sender, EventArgs e)
        {
            int cnt = dataGridView1.SelectedRows.Count;
            for (int i = 0; i < cnt; i++)
            {
                DataRowView drv = dataGridView1.SelectedRows[i].DataBoundItem as DataRowView;
                drv.Delete();
            }
        }

2.6 更新数据库代码

        //更新数据到数据库中
        private void btn_updataToDatabase_Click(object sender, EventArgs e)
        {
            OleDbConnection connection = new OleDbConnection(connectStr);
            connection.Open();
            OleDbCommand cmd = connection.CreateCommand();
            cmd.CommandText = "select * from fruit";
            OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
            OleDbCommandBuilder cmdBulid = new OleDbCommandBuilder(adapter);
            adapter.DeleteCommand = cmdBulid.GetDeleteCommand();
            adapter.InsertCommand = cmdBulid.GetInsertCommand();
            adapter.UpdateCommand = cmdBulid.GetUpdateCommand();
            adapter.Update((System.Data.DataTable)dataGridView1.DataSource);
            adapter.Dispose();
            cmdBulid.Dispose();
            cmd.Dispose();
            connection.Dispose();
        }

2.7 输出到Excel代码

//导出数据到Excel表格中
        private void btn_ouputToExcel_Click(object sender, EventArgs e)
        {
            SaveFileDialog saveDlg = new SaveFileDialog();
            saveDlg.Filter = "*.xls|*.xls";
            string outputStr;
            if (saveDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                Excel._Application myExcel;
                ThreadPool.QueueUserWorkItem(
                    (pp) => {
                        myExcel = new Microsoft.Office.Interop.Excel.Application();
                        Excel.Workbook p_wk = myExcel.Workbooks.Add();
                        Excel.Worksheet p_ws = (Excel.Worksheet)p_wk.Worksheets.Add();
                        for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                        {
                            p_ws.Cells[i + 1, 1] = dataGridView1.Rows[i].Cells[0].Value.ToString();
                            p_ws.Cells[i + 1, 2] = dataGridView1.Rows[i].Cells[1].Value.ToString();
                            p_ws.Cells[i + 1, 3] = dataGridView1.Rows[i].Cells[2].Value.ToString();
                        }
                        p_wk.SaveAs(saveDlg.FileName);
                        ((Excel._Application)myExcel.Application).Quit();
                        this.Invoke((MethodInvoker)(() => { MessageBox.Show("导出到Excel成功", "提示信息"); }));
                    } );
            }
            outputStr = saveDlg.FileName;
            saveDlg.Dispose();
        }

3 界面展示

3.1 原始数据库及数据载入

20190520222700578.png

20190520222607379.png

3.2 删除和增加记录

20190520223010817.png

20190520223157554.png

3.3 数据库更新

20190520223723604.png

20190520223417523.png

3.4 导出到Excel

20190520223808374.png


4 总结及疑问

4.1 成果总结:

系统练习了使用C#进行数据库更新、删除和修改操作,并将dataGridView中的数据导出到Excel表格中;

4.2 仍存在的问题:

(1)数据库采用自动编号,我手动输入的ID与更新后的数据库ID不一致,有待深入研究改善;

(2)刷新ID仅仅是在DataGridView控件中进行的,并未实际更新到数据库中

相关文章
|
7月前
|
XML 前端开发 C#
C#编程实践:解析HTML文档并执行元素匹配
通过上述步骤,可以在C#中有效地解析HTML文档并执行元素匹配。HtmlAgilityPack提供了一个强大而灵活的工具集,可以处理各种HTML解析任务。
348 19
|
8月前
|
监控 算法 C#
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
1822 0
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
1341 12
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
683 4
|
9月前
|
Python
如何根据Excel某列数据为依据分成一个新的工作表
在处理Excel数据时,我们常需要根据列值将数据分到不同的工作表或文件中。本文通过Python和VBA两种方法实现该操作:使用Python的`pandas`库按年级拆分为多个文件,再通过VBA宏按班级生成新的工作表,帮助高效整理复杂数据。
|
9月前
|
数据采集 数据可视化 数据挖掘
用 Excel+Power Query 做电商数据分析:从 “每天加班整理数据” 到 “一键生成报表” 的配置教程
在电商运营中,数据是增长的关键驱动力。然而,传统的手工数据处理方式效率低下,耗费大量时间且易出错。本文介绍如何利用 Excel 中的 Power Query 工具,自动化完成电商数据的采集、清洗与分析,大幅提升数据处理效率。通过某美妆电商的实战案例,详细拆解从多平台数据整合到可视化报表生成的全流程,帮助电商从业者摆脱繁琐操作,聚焦业务增长,实现数据驱动的高效运营。
|
11月前
|
存储 安全 大数据
网安工程师必看!AiPy解决fscan扫描数据整理难题—多种信息快速分拣+Excel结构化存储方案
作为一名安全测试工程师,分析fscan扫描结果曾是繁琐的手动活:从海量日志中提取开放端口、漏洞信息和主机数据,耗时又易错。但现在,借助AiPy开发的GUI解析工具,只需喝杯奶茶的时间,即可将[PORT]、[SERVICE]、[VULN]、[HOST]等关键信息智能分类,并生成三份清晰的Excel报表。告别手动整理,大幅提升效率!在安全行业,工具党正碾压手动党。掌握AiPy,把时间留给真正的攻防实战!官网链接:https://www.aipyaipy.com,解锁更多用法!
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
2553 10
|
数据采集 存储 JavaScript
自动化数据处理:使用Selenium与Excel打造的数据爬取管道
本文介绍了一种使用Selenium和Excel结合代理IP技术从WIPO品牌数据库(branddb.wipo.int)自动化爬取专利信息的方法。通过Selenium模拟用户操作,处理JavaScript动态加载页面,利用代理IP避免IP封禁,确保数据爬取稳定性和隐私性。爬取的数据将存储在Excel中,便于后续分析。此外,文章还详细介绍了Selenium的基本设置、代理IP配置及使用技巧,并探讨了未来可能采用的更多防反爬策略,以提升爬虫效率和稳定性。
902 4
|
9月前
|
Python
将Excel特定某列数据删除
将Excel特定某列数据删除