返回顶部

【技巧篇】DevExpress GridControl实现SQLite的读取

目的:由于在用DevExpress开发的时候,使用的表格控件需要读取数据,所以,就需要获得相应的数据文件。

一、将Excel导成数据库文件

1.打开Excel,将其列整理好(比如合并的列要拆开,标题单元格删除),然后另存为.csv文件即可(UTF-8编码)。
2.打开SQLite的可视化管理工具——Navicat,新建一个连接,如果还没有数据库文件,就选择New SQLite 3,然后选择数据库文件的存储位置。

3.打开数据库的那棵树,在Table上右击选择Import Wizard,然后就可以一步一步选择之前的.csv文件将其制成一张新表了。
至此,数据库已经完成建立。

二、导入SQLite的插件

网上有很多方法,但是官网下载什么的都没有必要,直接右击reference,选择Manage Nuget packages,然后在线搜索SQLite

这些就是需要安装的插件,其实安装第一个,其他的就会给你打包装好的。

三、进行窗体的开发

1.在窗体中选择GridControl控件,然后进行一些列的设计,记住FieldName就是之后连接数据表的列名。

2.然后转到这个窗体的代码文件上来。
除了主要的命名空间外,需要使用这些命名空间:

using System.Data;
using System.Data.SQLite;

主要的代码:

 private void gridControl1_Load(object sender, EventArgs e)
        {
            //添加数据源
            BuildDataSource();

        }
        private void BuildDataSource()
        {
            config c = new config();
            c.DataSource = @"F:\TMEor\TMEor\TMEor\bin\Debug\databaseSource.db";
            SQLiteConnection conn = new SQLiteConnection();
            conn.ConnectionString = c.DataSource;
            conn.Open();
            SQLiteCommand cmd = conn.CreateCommand();
            cmd.CommandText = "select * from databaseSource";
            SQLiteDataReader reader = cmd.ExecuteReader();

            DataTable dt = new DataTable();
            dt.Columns.Add("选择", typeof(bool));
            dt.Columns.Add("序号", typeof(string));
            dt.Columns.Add("加工内容", typeof(string));
            dt.Columns.Add("刀具分类", typeof(string));
            dt.Columns.Add("描述", typeof(string));
            dt.Columns.Add("刀具直径", typeof(string));
            dt.Columns.Add("刀柄夹持直径", typeof(string));
            dt.Columns.Add("刀具长度", typeof(string));
            dt.Columns.Add("转速", typeof(string));
            dt.Columns.Add("进给", typeof(string));
            dt.Columns.Add("冷却液压力", typeof(string));
            dt.Columns.Add("刀柄类型", typeof(string));
            dt.Columns.Add("国产供应商", typeof(string));
            dt.Columns.Add("进口供应商", typeof(string));
            dt.Columns.Add("刀具状态", typeof(string));
            dt.Columns.Add("录入时间", typeof(string));
            dt.Columns.Add("录入人员", typeof(string));
            dt.Columns.Add("数量", typeof(string));
            dt.Columns.Add("最大寿命", typeof(string));
            dt.Columns.Add("剩余寿命", typeof(string));
            dt.Columns.Add("备注", typeof(string));
            
            while (reader.Read())
            {
                dt.Rows.Add(new object[] {false, reader[0].ToString(), reader[1].ToString(), reader[2].ToString(), reader[3].ToString(), reader[4].ToString(), reader[5].ToString(),
                reader[6].ToString(), reader[7].ToString(), reader[8].ToString(), reader[9].ToString(), reader[10].ToString(), reader[11].ToString(), reader[12].ToString(),
                reader[13].ToString(), reader[14].ToString(), reader[15].ToString(), reader[16].ToString(), reader[17].ToString(), reader[18].ToString(), null});
            }
            conn.Close();
            gridControl1.DataSource = dt;
        }

然后是使用的一个config类:(用于获取数据源文件)

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SQLite;

namespace TMEor
{
    public class config
    {
        private string DatabaseFile = "";
        public string DataSource
        {
            set
            {
                DatabaseFile = value;
            }
            get 
            { 
                return string.Format("Data Source={0}", DatabaseFile); 
            }
        }
    }
}

备注:
在读取数据文件(while(reader.Read())的时候,循环体里面读取数据库表格中的方法也可以是:

reader.GetString(i);//i是列表的索引,和上面的代码里头一样
reader.GetInt16(i);

诸如此类,这样有个缺点就是:如果表格中有null值,就会报错,而上面的方法即使是空值也可以读取到DataTable中。

posted @ 2020-06-23 00:22  藤原豆腐店の張さん  阅读(737)  评论(0编辑  收藏  举报