分享

机房重构 DataGridView内容更新到数据库中

 印度阿三17 2018-10-28

前言

今天刚刚解决了一个重要的问题,目前还没看见我这种方法去解决问题的.给大家提供一个新的思路,希望能对您有帮助!

正文

问题背景

消费基础的数据表单要跟新到数据库,并且是没个单元格更改后都要更新到数据库中,这个就很让人头疼了,在网上找了好多资料,有好些都是看不懂的,这可怎么办呢!就各种方法去试着用,都不太理想,困扰了我好多天.

实现效果

直接上图吧
在这里插入图片描述
上图中红色框里的内容想修改并同时更新到数据库中
首先,选中单元格然后输入想要更改的数值
在这里插入图片描述
输入数值后回车或者鼠标点一下其他地方会弹出一个对话框,问是否要修改这个数据
在这里插入图片描述
如果点击取消按钮系统会自动取消刚才输入的数值,恢复到之前的数值
如果点击的是确定就修改成功了,并且同时也修改了数据库中的数据
在这里插入图片描述
上图中就是修改后的数据,整个修改过称就结束了.

代码分析

这个功能看着很简单其实我在这个问题上纠结了很长时间了,下来咱们就看一下主要的代码是怎么写的
这个思路首先是要确定Data Grid View控件中选中的是那个单元格的数据,选中的单元格我要知道它的三条主要数据,
第一个是行
第二个是列
第三个是单元格的具体内容
同过查询DataGridView控件的属性知道

			//判断编辑前后的值是否一样(是否修改了内容)
            if (Object.Equals(cellTempValue, dgvConsumptionBill.Rows[e.RowIndex].Cells[e.ColumnIndex].Value))
            {
                //如果没有修改,则返回
                return;
            }

            //判断用户是否确定修改
            if (MessageBox.Show("确定修改?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.None) != DialogResult.OK)
            {
                //如果不修改,恢复原来的值
                dgvConsumptionBill.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = cellTempValue;
                return;
            }
			//获取总行数
            dgvConsumptionBill.Rows.Count;
            //获取当前选中行索引
            int i = this.dgvConsumptionBill.CurrentRow.Index;
            //获取当前选中列索引
            int j = this.dgvConsumptionBill.CurrentCell.ColumnIndex;
            //获得选中单元格内的具体数据
            double NumericalValue =Convert.ToDouble(dgvConsumptionBill.Rows[i].Cells[j].Value); 
            //获得单元格中的序号列内容
            int SerialNumber = (int)dgvConsumptionBill.Rows[i].Cells[0].Value;
            //获得选中单元格的列名称
            string ColumnName = Convert.ToString(dgvConsumptionBill.Columns[j].Name);

上边的代码就是我想要得到的UI界面中的信息.
下边就是怎样写入数据库中了主要代码如下

public DataTable updateBasicChargeInfo(string ColumnName,double NumericalValue,int SerialNumber)
        {
            SQLHelper sqlHelper = new SQLHelper();
            SqlParameter[] sqlParams =
            {
                //从UI层传过来的三个数据
                new SqlParameter("@ColumnName",ColumnName),
                new SqlParameter("@NumericalValue",NumericalValue),
                new SqlParameter("@SerialNumber",SerialNumber),

            };
            //将选中的内容写入到数据表中
            switch (ColumnName)
            {
               //判断是否写入"单价"
                case "UnitPrice":
                    string sql = "update [BasicCharge] set UnitPrice=@NumericalValue where SerialNumber=@SerialNumber";
                    DataTable table = sqlHelper.ExecuteQuery(sql, sqlParams, CommandType.Text);
                    return table;
				//判断是否写入"打折"
                case "Sale":
                    string sql1 = "update [BasicCharge] set Sale=@NumericalValue where SerialNumber=@SerialNumber";
                    DataTable table1 = sqlHelper.ExecuteQuery(sql1, sqlParams, CommandType.Text);
                    return table1;
             //判断是否写入"充值金额"
                case "RechargeAmount":
                    string sql2 = "update [BasicCharge] set RechargeAmount=@NumericalValue where RechargeAmount=@SerialNumber";
                    DataTable table2 = sqlHelper.ExecuteQuery(sql2, sqlParams, CommandType.Text);
                    return table2;
                   //判断是否写入"赠送金额"
                case "DonationAmount":
                    string sql3 = "update [BasicCharge] set DonationAmount=@NumericalValue where SerialNumber=@SerialNumber";
                    DataTable table3 = sqlHelper.ExecuteQuery(sql3, sqlParams, CommandType.Text);
                    return table3;
                
            }
        }

结束语

总是要遇到不同的问题,要有不同的想法,什么是最好的,适合自己的才是最好的.现在这个小项目上的时间已经两个月了,当然中间也有一些其他的事情去处理,总的来说用的时间还是很长了,不过收获也是巨大的,从最开始看了两集入门视频到现在基本问题都能自己解决了,对七层结构,和数据库的增删改查,数据返回,不同层之间的数据调用等都比较熟悉了,这个收获感觉还是很欣慰的.还要接着努力的去学习,现在的知识更新的太快了,加油!!

来源:http://www./content-2-73701.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多