C#后台制作之数据库(二、如何清除显示以及将数据库数据导出到excel表格文件中)

前一篇主要是串口数据的接收,显示和存入数据库。但是这样在客户实际使用时还是很不方便。

现在要如下修改:先把数据先记录在datagridview的表格中,之后当单击“保存数据”时,再批量将数据存储到数据库中。若不想保存数据可以使用“清除显示”按钮。

“导出到excel表格”考虑将整个Access数据库的数据导出。最后还要实现对数据库进行日期管理,分日期操作。

 首先修改了一个小地方:         通常 DataGridView 的最下面一行是用户新追加的行(行头显示 * )。不太喜欢,把他去掉了。

   dataGridView1.AllowUserToAddRows = false;//通常 DataGridView 的最下面一行是用户新追加的行(行头显示 * )。
                                                    //如果不想让用户新追加行即不想显示该新行,可以将 DataGridView 对象的 AllowUserToAddRows 属性设置为 False。

 这样接下来清除显示就不会报错了。如不加这句,会提示不能操作新加入数据。

清除显示如下:

        private void button6_Click(object sender, EventArgs e)
        {
            while (dataGridView1.Rows.Count != 0)
                {
                dataGridView1.Rows.RemoveAt(0);
                }

        }

在使用过程中还是出现这么两个问题:

1.我的timer1是在tebcontrol的“数据采集与测试”分页中,当我切换到tebcontrol的“数据存储与分析”分页时,timer1就停止了,串口发送数据也就停止了,没有新的数据传过来了。

2.同时,已经存在于数据库中的数据在Formload时会在dataGridView中显示出来,这样当数据库中存有很多数据时就要托动滚动条去找新数据了,而且还不好找。

暂时没找到好的办法,先把导出做了。

使用按钮

        private void button5_Click(object sender, EventArgs e)  

       {      

         FormAC Form2 = new FormAC();             

         Form2.Show();

        }

重新打开了一个窗口:

由于参考了这样就实现了导出。主要代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class FormAC : Form
    {
        public FormAC()
        {
            InitializeComponent();
        }
        public void AccessGuideJoinExcel(string Access, string AccTable, string Excel)
        {
            try
            {
                string tem_sql = "";//定义字符串
                string connstr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Access + ";Persist Security Info=True";//记录连接Access的语句
                System.Data.OleDb.OleDbConnection tem_conn = new System.Data.OleDb.OleDbConnection(connstr);//连接Access数据库
                System.Data.OleDb.OleDbCommand tem_comm;//定义OleDbCommand类
                tem_conn.Open();//打开连接的Access数据库
                tem_sql = "select Count(*) From " + AccTable;//设置SQL语句,获取记录个数
                tem_comm = new System.Data.OleDb.OleDbCommand(tem_sql, tem_conn);//实例化OleDbCommand类
                int RecordCount = (int)tem_comm.ExecuteScalar();//执行SQL语句,并返回结果
                //每个Sheet只能最多保存65536条记录。
                tem_sql = @"select top 65535 * into [Excel 8.0;database=" + Excel + @".xls].[Sheet2] from 博达电池数据表";//记录连接Excel的语句
                tem_comm = new System.Data.OleDb.OleDbCommand(tem_sql, tem_conn);//实例化OleDbCommand类
                tem_comm.ExecuteNonQuery();//执行SQL语句,将数据表的内容导入到Excel中
                tem_conn.Close();//关闭连接
                tem_conn.Dispose();//释放资源
                tem_conn = null;
                MessageBox.Show("导入完成");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "提示!");
            }
        }
        public void GetTable(string Apath, ComboBox ComBox)
        {
            string connstr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Apath + ";Persist Security Info=True";
            System.Data.OleDb.OleDbConnection tem_OleConn = new System.Data.OleDb.OleDbConnection(connstr);
            tem_OleConn.Open();
            DataTable tem_DataTable = tem_OleConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
            tem_OleConn.Close();
            ComBox.Items.Clear();
            for (int i = 0; i < tem_DataTable.Rows.Count; i++)
            {
                ComBox.Items.Add(tem_DataTable.Rows[i][2]);
            }
            if (ComBox.Items.Count > 0)
                ComBox.SelectedIndex = 0;

        }
        private void button1_Click(object sender, EventArgs e)
        {
            openFileDialog1.FileName = "";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = openFileDialog1.FileName;
                GetTable(textBox1.Text, comboBox1);
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            AccessGuideJoinExcel(textBox1.Text, comboBox1.Text, textBox3.Text + "\\" + textBox4.Text);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            folderBrowserDialog1.SelectedPath = "";
            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
                textBox3.Text = folderBrowserDialog1.SelectedPath;
        }


    }
}

今天工作到此吧,留了两个问题,只能有空再解决了,话说又是星期一了!

原文地址:https://www.cnblogs.com/preorder69/p/3020425.html