将DataGridview中的数据存入数据库

在机房收费的时候我们都会用到DataGridView控件,用来显示从数据库中返回的数据。如何用DataGridView将数据存入到数据库,而且是存入到字段与数据库中不一致的表中呢?

前提介绍

为了将如下的11张表中数据录入到数据库中

这是我们设计的数据库,将部门、公司、表类型、行字段、列字段分别抽象成不同的表,然后用他们的主键作为联合主键形成T_dataTable表

这是显示出的DataGridView形式,开始默认为0

Load事件

将DataGridview的标题整体右移一个单位格,将空出的第一个格显示本表名称,列显示:将每列的第一个单位格中数据显示为列值。

     Private Sub frmGovernmentTable1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        '增加行数
        dgvData.Rows.Add(8)

        lineNo = 9
        rowsNo = 18
        listNo = 1
        '初始化行表
        dgvData.Columns(0).HeaderText = "党政人才类别统计表1"  '表头名
        dgvData.Columns(1).HeaderText = "男"
        dgvData.Columns(2).HeaderText = "女"
        dgvData.Columns(3).HeaderText = "少数民族"
        dgvData.Columns(4).HeaderText = "中共党员"
        dgvData.Columns(5).HeaderText = "研究生"
        dgvData.Columns(6).HeaderText = "大学本科"
        dgvData.Columns(7).HeaderText = "大学专科"
        dgvData.Columns(8).HeaderText = "中专"
        dgvData.Columns(9).HeaderText = "高中"
        dgvData.Columns(10).HeaderText = "初中"
        dgvData.Columns(11).HeaderText = "小学"
        dgvData.Columns(12).HeaderText = "35岁及以下"
        dgvData.Columns(13).HeaderText = "36岁至40岁"
        dgvData.Columns(14).HeaderText = "41岁至45岁"
        dgvData.Columns(15).HeaderText = "46岁至50岁"
        dgvData.Columns(16).HeaderText = "51岁至54岁"
        dgvData.Columns(17).HeaderText = "55岁及以上"

        '初始化列表
        dgvData.Rows(0).Cells(0).Value = "中国共产党各级机关"
        dgvData.Rows(1).Cells(0).Value = "各级人民代表大会及其常务委员会机关"
        dgvData.Rows(2).Cells(0).Value = "各级行政机关"
        dgvData.Rows(3).Cells(0).Value = "中国人民政治协商会议各级委员会机关"
        dgvData.Rows(4).Cells(0).Value = "各级审判机关"
        dgvData.Rows(5).Cells(0).Value = "各级检察机关"
        dgvData.Rows(6).Cells(0).Value = "各民主党派和工商联的各级机关"
        dgvData.Rows(7).Cells(0).Value = "参公管理人民团体和群众团体机关"
        dgvData.Rows(8).Cells(0).Value = "参公管理的其它事业单位"

        Call ShowInfo(listNo, rowsNo, lineNo, dgvData)

    End Sub

显示数据模块

U层:循环嵌套遍历所有数据格,将单位格对应的行Id,列Id,以及部门Id、公司Id,表Id赋值给实体传递三层。

Imports BLL
Imports Entity
Module ModuleTable
    Public rowsNo As Integer
    Public lineNo As Integer
    Public listNo As Integer
    Property intno As Integer = 0  '定义一个初始变量,用来判断是否已经录入
    ''' <summary>
    '''显示数据信息
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub ShowInfo(listNo As Integer, rowsNo As Integer, lineNo As Integer, dgvData As DataGridView)
        Dim simpleQuerybll As New BLL.BLLInfoInpute
        Dim table As DataTable

        '定义部门ID、公司ID、表ID、行ID、列ID、UserID
        Dim departmentInfo As New Entity.DepartMentEntity
        Dim companyInfo As New Entity.ComPanyEntity
        Dim listInfo As New Entity.ListEntity
        Dim rowInfo As New Entity.RowEntity
        Dim lineInfo As New Entity.LineEntity

        departmentInfo.id = _companytypeid
        companyInfo.id = _companyNameid
        listInfo.id = listNo

        For s = 1 To rowsNo - 1  '18
            For h = 0 To lineNo - 1  '9
                '获得行列名称
                rowInfo.name = dgvData.Columns(s).HeaderText.ToString
                lineInfo.name = dgvData.Rows(h).Cells(0).Value

                '走三层传递
                table = simpleQuerybll.ShowData(departmentInfo, companyInfo, listInfo, rowInfo, lineInfo)  '走三层

                '数据填充
                If table.Rows.Count = 0 Then
                    dgvData.Rows(h).Cells(s).Value = 0
                Else
                    dgvData.Rows(h).Cells(s).Value = table.Rows(0).Item(0)
                    'btnInput.Enabled = False
                End If
            Next
        Next

    End Sub

D层:在SQL语句中查询单位格所对应的data数据,公司行Id和列Id为进行跨表查询name得到。

    ''' <summary>
    ''' 根据表单显示表的数据
    ''' </summary>
    ''' <param name="departmentInfo"></param>
    ''' <param name="companyInfo"></param>
    ''' <param name="listInfo"></param>
    ''' <param name="rowInfo"></param>
    ''' <param name="lineInfo"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function ShowData(ByVal departmentInfo As Entity.DepartMentEntity, ByVal companyInfo As Entity.ComPanyEntity, ByVal listInfo As Entity.ListEntity, ByVal rowInfo As Entity.RowEntity, ByVal lineInfo As Entity.LineEntity) As DataTable
        Dim sql As String
        Dim table As DataTable
        Dim helper As New SqlHelper
        '定义参数
        Dim sqlparam As SqlParameter() = {New SqlParameter("@departmentId", departmentInfo.id),
                                          New SqlParameter("@unitId", companyInfo.id),
                                          New SqlParameter("@listId", listInfo.id),
                                          New SqlParameter("@rowName", rowInfo.name),
                                          New SqlParameter("@lineName", lineInfo.name)}
        'Sql 查询语句
        sql = "select data from T_dataTable where [email protected] and [email protected] and [email protected] and rowId=(select id from T_rowTable where [email protected]) and lineId=(select id from T_lineTable  where [email protected])"
        '传入SQLHelper
        table = helper.ExecSelect(sql, CommandType.Text, sqlparam)

        Return table

    End Function

录入模块

U层:循环嵌套遍历所有数据格,将单位格对应的行Id,列Id,以及部门Id、公司Id,表Id赋值给实体传递三层。

Private Sub btnInput_Click(sender As Object, e As EventArgs) Handles btnInput.Click
        listNo = 1
        Call ShowInsert(listNo, rowsNo, lineNo, dgvData)
End Sub
    ''' <summary>
    ''' 插入功能
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub ShowInsert(listNo As Integer, rowsNo As Integer, lineNo As Integer, dgvData As DataGridView)

        Dim simpleQuerybll As New BLL.BLLInfoInpute

        '定义部门ID、公司ID、表ID、行ID、列ID、UserID
        Dim departmentInfo As New Entity.DepartMentEntity
        Dim companyInfo As New Entity.ComPanyEntity
        Dim listInfo As New Entity.ListEntity
        Dim rowInfo As New Entity.RowEntity
        Dim lineInfo As New Entity.LineEntity
        Dim dataInfo As New Entity.DataEntity
        If intno = 1 Then
            MsgBox("该条数据已经录入,如需修改请更新!", , "提示")
            Exit Sub
        End If

        '传递部门ID、公司ID、表ID、行ID、列ID、UserID
        departmentInfo.id = _companytypeid
        companyInfo.id = _companyNameid
        listInfo.id = listNo

        Dim s As Integer
        Dim h As Integer
        Dim i As Integer

        For s = 1 To dgvData.Columns(s).HeaderText.Count - 1 's行号
            For h = 0 To dgvData.Rows.Count - 1 '列号

                rowInfo.name = dgvData.Columns(s).HeaderText.ToString
                lineInfo.name = dgvData.Rows(h).Cells(0).Value
                dataInfo.data = dgvData.Rows(h).Cells(s).Value

                i = simpleQuerybll.InsertData(departmentInfo, companyInfo, listInfo, rowInfo, lineInfo, dataInfo)

            Next
        Next

        MsgBox("数据录入成功!", , "提示")

        intno = 1
    End Sub

D层:在SQL语句中插入data数据到所对应的单位格,公司行Id和列Id为进行跨表查询name得到。

    ''' <summary>
    ''' 根据表插入数据
    ''' </summary>
    ''' <param name="departmentInfo"></param>
    ''' <param name="companyInfo"></param>
    ''' <param name="listInfo"></param>
    ''' <param name="rowInfo"></param>
    ''' <param name="lineInfo"></param>
    ''' <param name="dataInfo"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function InsertData(ByVal departmentInfo As Entity.DepartMentEntity, ByVal companyInfo As Entity.ComPanyEntity, ByVal listInfo As Entity.ListEntity, ByVal rowInfo As Entity.RowEntity, ByVal lineInfo As Entity.LineEntity, ByVal dataInfo As Entity.DataEntity) As Integer
        Dim sql As String
        Dim i, j As Integer
        Dim helper As New SqlHelper
        '定义参数集合
        Dim sqlparam As SqlParameter() = {New SqlParameter("@departmentId", departmentInfo.id),
                                          New SqlParameter("@unitId", companyInfo.id),
                                          New SqlParameter("@listId", listInfo.id),
                                          New SqlParameter("@rowName", rowInfo.name),
                                          New SqlParameter("@lineName", lineInfo.name),
                                          New SqlParameter("@data", dataInfo.data)}
        'SQL语句插入T_dataTable表
        sql = "insert into T_dataTable (departmentId,unitId,listId,rowId,lineId,data,isDelete) values (@departmentId,@unitId,@listId,(select id from T_rowTable where [email protected]),(select id from T_lineTable where [email protected]),@data,1)"

        i = helper.ExecAddDelUpdate(sql, CommandType.Text, sqlparam)

        Dim sqlparam1 As SqlParameter() = {New SqlParameter("@departmentId", departmentInfo.id),
                                          New SqlParameter("@unitId", companyInfo.id),
                                          New SqlParameter("@listId", listInfo.id)}
        'SQL语句插入已经录入表T_alreadyinputTable
        sql = "Insert into T_alreadyinputTable (departmentId,unitId,listId) values (@departmentId,@unitId,@listId)"
        j = helper.ExecAddDelUpdate(sql, CommandType.Text, sqlparam1)
        Return i

    End Function

(这里面连个语句的连写最好使用存储过程)

更新功能同插入功能类似,只是D层稍有不同。

数据库结果显示

小结

这个功能重要的是理清思路,开始我们做的时候都很迷茫,也许有思路但是实现起来却是没有头脑,但是慢慢地去做,一点点理清,找到结果,当数据显示出来的那一刻很开心。团队合作是一个大的趋势,感谢小伙伴们的支持和帮助~~

时间: 2024-08-01 21:24:54

将DataGridview中的数据存入数据库的相关文章

C#读取Excel表格数据到DataGridView中和导出DataGridView中的数据到Excel

其实想在datagridview中显示excel表格中的数据跟读取数据库中的数据没什么差别,只不过是创建数据库连接的时候连接字段稍有差别. private void btnShow_Click(object sender, EventArgs e) { OpenFileDialog fd = new OpenFileDialog();//首先根据打开文件对话框,选择excel表格 ofd.Filter = "表格|*.xls";//打开文件对话框筛选器 string strPath;/

vs 2015 rdlc报表绑定datagridview中的数据

这几天一直想要实现rdlc报表绑定datagridview中的数据,始终在虚拟表向rdlc报表绑定这一步上出错.今天从下午4点到七点四十一直在尝试.最终还是实现了,最然并不知所以然,这个问题还是以后在考虑吧,目前的项目要紧. 首先是  datagridview中的数据传到虚拟表中. for (int i = 0; i < dgvscan.Columns.Count - 1; i++) { dtout.Columns.Add(dgvscan.Columns[i].Name); } //添加行 fo

运用.NIT将数据存入数据库、读取数据库(运用封装)陈老师作业

我基础不好,根据所学的知识,书本的例题修改的,也不知道我理解的是否符合老师要求 运用C#将数据存入数据库.并且可以读取数据库里的数据,此项目我运用了封装.我运用了一个窗体将数据存读数据. 我首先创建了一个数据库,库名“数学题库” ,然后创建了一个表“tiku1”, 添加一个类Class1 class Class1    {        public string strCon = @"Data Source=.;Initial Catalog=数学题库;Integrated security=

c#.net循环将DataGridView中的数据赋值到Excel中,并设置样式

Microsoft.Office.Interop.Excel.Application excel =                new Microsoft.Office.Interop.Excel.Application();            excel.SheetsInNewWorkbook = 1;            excel.Workbooks.Add(); //设置Excel列名            excel.Cells[1, 1] = "学号";     

Java -&gt; 把Excel表格中的数据写入数据库与从数据库中读出到本地 (未完善)

写入: private void insertFile(HttpServletRequest request, HttpServletResponse response) throws IOException { String path_member = request.getParameter("path_member"); List list = this.insert("f:/tmp001.xls", "gs_sale_members");

解析Excel文件并把数据存入数据库

前段时间做一个小项目,为了同时存储多条数据,其中有一个功能是解析Excel并把其中的数据存入对应数据库中.花了两天时间,不过一天多是因为用了"upload"关键字作为URL从而导致总报同一个错,最后在同学的帮助下顺利解决,下面我把自己用"POI"解析的方法总结出来供大家参考(我用的是SpingMVC和hibernate框架). 1.web.xml中的配置文件 web.xml中的配置文件就按照这种方式写,只需要把"application.xml"换

解决中文数据存入数据库乱码, 页面乱码等问题

当数据库或页面出现中文乱码时通常需要从以下几个地方进行分析 1.页面编码 2.数据库连接语句(如果数据连接的properties文件编码与数据库编码格式不一致会导致存入数据库的数据乱码不论中文英文同意乱码) 设置characterencoding为UTF-8 如jdbc.mysql.url=jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF8 如果使用Hibernate,那就把所有的配置文件头部的编码格式改成U

用Toad把excel中的数据导入数据库的表中

第1步:找到菜单选项 第2步:选择表名 第3步:选择文件类型为Excel 第4步:设置参数 在oracle中trim函数可以除去字符串前后的空格,所以选上. 第5步:把excel中的列和数据库中的字段对应起来.每一列对应一个字段. 第6步:查看约束 第7步:设置导入模式,我设置的时导入完成后不提交,手动提交. 点击Execute执行. 执行过程中: 出现以下错误,问到是否继续执行.这种错误一般是因为excel中的数据结构与数据库表中的数据类型不统一而引起的. 我点击的yes继续执行,中间可能还会

【ADO.NET】3、从TXT中导入数据到数据库

private void btnInput_Click(object sender, EventArgs e) { if (opFile.ShowDialog() != DialogResult.OK) //判断用户点击 确定 还是 取消,不点确定,则返回程序 { return; } using(FileStream FStream = File.OpenRead(opFile.FileName)) //打开文件进行读取 { //定义字符编码为GB2312 using (StreamReader