您的位置:首页 > 数据库

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

2013-04-14 17:30 1401 查看
前一篇主要是串口数据的接收,显示和存入数据库。但是这样在客户实际使用时还是很不方便。



现在要如下修改:先把数据先记录在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;
}

}
}


今天工作到此吧,留了两个问题,只能有空再解决了,话说又是星期一了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐