• 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;
            }
    
    
        }
    }

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

  • 相关阅读:
    win2K/win2003终端服务器超出最大允许连接数解决之道
    DOM与SAX读取xml文件例程
    ubuntu安装配置telnet
    SCTP 简介
    groovy 脚本中文乱码问题解决
    编码问题研究
    gvim支持utf8
    ctags使用方法
    我家猫病了。。
    小朋友搞笑造句
  • 原文地址:https://www.cnblogs.com/preorder69/p/3020425.html
Copyright © 2020-2023  润新知