Winform-CRS-Demo

Github地址:https://github.com/HongBorabbit/CRS-Winform

这里并没有进行优化,有能力的小伙伴可以自己封装 SQLHelper 类,这样更加规范

[toc]功能演示

https://txmov2.a.yximgs.com/upic/2020/07/24/10/BMjAyMDA3MjQxMDU0MzJfMTY0MjkxMTU5NV8zMjk2NjUyMTg1Ml8wXzM=_b_B630d451891cb563c5e1b9aaf9499c1ea.mp4?tt=b&di=ab0fbf44&bp=10004

功能图

一、创建数据库

如果你不熟悉 T-SQL 语句,可以使用手动创建数据库。

# 注意这里创建完数据库(Banks)–需要把数据库设置一下 否则数据库在插入文字的时候会变成(???)的形式。

# 所以要设置数据库排序规则,注意设置前不能创建任何表,(一定要先设置数据库排序规则,再创建表),不然会报错,这里设置原因主要为了导出Excel表格

二、搭建三层

# 各层之间的引用

# 注意这里如果使用的Visual Studio 2019 来新建的,需要注意2019的类库 和其他版本的类库,这里踩到这个坑,运行会提示错误。–(之前一直使用的2017开发环境,所以踩到了这个坑)

# 建立时一定要使用 (.NET Framework)类库 ,不要选择(.NET Standard)

# 如下

1、UL层

2、DAL层

3、BLL层

4、最终效果

二、设计窗体

–主窗体

# 这里就不过多放了,详情参考一下 GitHub链接

三、导出Excel

# 关于导出Excel功能,这里也没过多研究,找的别人的轮子,照着别人文档,配置

1、1查询数据

# 使用DataTable – – 更多DataTable使用技巧 >> C# DataTable 详解

1、引用命名空间

using System.Data;
        public DataTable SelectUser(string Card_Number)
        {
            //1、连接数据库
            SqlConnection conn = new SqlConnection(GetSqlConnectionString());
            //2,实例化适配器对象
            String sql = String.Format("select * from Recording where Card_Number='{0}'", Card_Number);
            SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
            DataSet ds = new DataSet();
            DataTable table = new DataTable();
            sda.Fill(ds);
            return ds.Tables[0];
        }

2、DataTable导出Excel

>>更多C#中datatable导出excel(三种方法)<<

  private void btnExcel_Click(object sender, EventArgs e)
        {

            RecordingBLL recordingBLL = new RecordingBLL();
            DataTable dt = recordingBLL.GetAllUser(this.label1.Text);
            //下载Nuget包 Microsoft.Office.Interop.Excel
            Microsoft.Office.Interop.Excel.Application appexcel = new Microsoft.Office.Interop.Excel.Application();
            SaveFileDialog savefiledialog = new SaveFileDialog();
            System.Reflection.Missing miss = System.Reflection.Missing.Value;
            appexcel = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook workbookdata;
            Microsoft.Office.Interop.Excel.Worksheet worksheetdata;
            Microsoft.Office.Interop.Excel.Range rangedata;
            //设置对象不可见
            appexcel.Visible = false;
            System.Globalization.CultureInfo currentci = System.Threading.Thread.CurrentThread.CurrentCulture;
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-us");
            workbookdata = appexcel.Workbooks.Add(miss);
            worksheetdata = (Microsoft.Office.Interop.Excel.Worksheet)workbookdata.Worksheets.Add(miss, miss, miss, miss);
            //给工作表赋名称
            worksheetdata.Name = "saved";
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                worksheetdata.Cells[1, i + 1] = dt.Columns[i].ColumnName.ToString();
            }
            //因为第一行已经写了表头,所以所有数据都应该从a2开始
            rangedata = worksheetdata.get_Range("a2", miss);
            Microsoft.Office.Interop.Excel.Range xlrang = null;
            //irowcount为实际行数,最大行
            int irowcount = dt.Rows.Count;
            int iparstedrow = 0, icurrsize = 0;
            //ieachsize为每次写行的数值,可以自己设置
            int ieachsize = 1000;
            //icolumnaccount为实际列数,最大列数
            int icolumnaccount = dt.Columns.Count;
            //在内存中声明一个ieachsize×icolumnaccount的数组,ieachsize是每次最大存储的行数,icolumnaccount就是存储的实际列数
            object[,] objval = new object[ieachsize, icolumnaccount];
            icurrsize = ieachsize;
            while (iparstedrow < irowcount)
            {
                if ((irowcount - iparstedrow) < ieachsize)
                    icurrsize = irowcount - iparstedrow;
                //用for循环给数组赋值
                for (int i = 0; i < icurrsize; i++)
                {
                    for (int j = 0; j < icolumnaccount; j++)
                        objval[i, j] = dt.Rows[i + iparstedrow][j].ToString();
                    System.Windows.Forms.Application.DoEvents();
                }
                string X = "A" + ((int)(iparstedrow + 2)).ToString();
                string col = "";
                if (icolumnaccount <= 26)
                {
                    col = ((char)('A' + icolumnaccount - 1)).ToString() + ((int)(iparstedrow + icurrsize + 1)).ToString();
                }
                else
                {
                    col = ((char)('A' + (icolumnaccount / 26 - 1))).ToString() + ((char)('A' + (icolumnaccount % 26 - 1))).ToString() + ((int)(iparstedrow + icurrsize + 1)).ToString();
                }
                xlrang = worksheetdata.get_Range(X, col);
                // 调用range的value2属性,把内存中的值赋给excel
                xlrang.Value2 = objval;
                iparstedrow = iparstedrow + icurrsize;
            }
            //保存工作表
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlrang);
            xlrang = null;
            //调用方法关闭excel进程
            appexcel.Visible = true;
        }

这里设置了一个点击控件,点击导出Excel

# 注意这里导出的内容会显示成

# 这是因为Excel 本身格式转换了,所以我们这里设置 >> Excel的单元格格式 <<

这时候数据就显示正常了

暂无评论

发送评论 编辑评论

正在回复 的评论 :

				
上一篇
下一篇