机房重构 DataGridView内容更新到数据库中
前言
今天刚刚解决了一个重要的问题,目前还没看见我这种方法去解决问题的.给大家提供一个新的思路,希望能对您有帮助!
正文
问题背景
消费基础的数据表单要跟新到数据库,并且是没个单元格更改后都要更新到数据库中,这个就很让人头疼了,在网上找了好多资料,有好些都是看不懂的,这可怎么办呢!就各种方法去试着用,都不太理想,困扰了我好多天.
实现效果
直接上图吧
上图中红色框里的内容想修改并同时更新到数据库中
首先,选中单元格然后输入想要更改的数值
输入数值后回车或者鼠标点一下其他地方会弹出一个对话框,问是否要修改这个数据
如果点击取消按钮系统会自动取消刚才输入的数值,恢复到之前的数值
如果点击的是确定就修改成功了,并且同时也修改了数据库中的数据
上图中就是修改后的数据,整个修改过称就结束了.
代码分析
这个功能看着很简单其实我在这个问题上纠结了很长时间了,下来咱们就看一下主要的代码是怎么写的
这个思路首先是要确定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 [email protected] where [email protected]";
DataTable table = sqlHelper.ExecuteQuery(sql, sqlParams, CommandType.Text);
return table;
//判断是否写入"打折"
case "Sale":
string sql1 = "update [BasicCharge] set [email protected] where [email protected]";
DataTable table1 = sqlHelper.ExecuteQuery(sql1, sqlParams, CommandType.Text);
return table1;
//判断是否写入"充值金额"
case "RechargeAmount":
string sql2 = "update [BasicCharge] set [email protected] where [email protected]";
DataTable table2 = sqlHelper.ExecuteQuery(sql2, sqlParams, CommandType.Text);
return table2;
//判断是否写入"赠送金额"
case "DonationAmount":
string sql3 = "update [BasicCharge] set [email protected] where [email protected]";
DataTable table3 = sqlHelper.ExecuteQuery(sql3, sqlParams, CommandType.Text);
return table3;
}
}
结束语
总是要遇到不同的问题,要有不同的想法,什么是最好的,适合自己的才是最好的.现在这个小项目上的时间已经两个月了,当然中间也有一些其他的事情去处理,总的来说用的时间还是很长了,不过收获也是巨大的,从最开始看了两集入门视频到现在基本问题都能自己解决了,对七层结构,和数据库的增删改查,数据返回,不同层之间的数据调用等都比较熟悉了,这个收获感觉还是很欣慰的.还要接着努力的去学习,现在的知识更新的太快了,加油!!