c# - 更新数据时datagridview中的点/点
问题描述
所以,我有一个 datagridview (datagridview1),它连接到 SQL Server。第 3 列 (adhb) 中的 datagridview 可以通过按下按钮进行更新,只需在特定列中进行编辑。问题是当我尝试更新十进制数(例如 100.25)时,它只是更改为 10025。它如何能够更新十进制值?
数据库(tbl_tahunan),第3列(adhb)设置为十进制(18,2)
查询更新数据
query = "UPDATE tbl_tahunan SET adhb = " + datagridview1.Rows[0].Cells[2].Value + " WHERE id_coicop = 1";
cmd = new SqlCommand(query, conn);
cmd.ExecuteNonQuery();
解决方案
如果您让生活变得轻松,那么使用数据网格编辑数据库非常容易。尝试这样做:
- 做一个全新的项目,这样你就不会打扰现有的代码
- 添加数据集类型的新文件
- 双击打开
- 右键单击表面上的任意位置,选择 Add.. TableAdapter
- 填写db的连接详情
- 选择“产生行的选择”
- 提出查询
SELECT * FROM tbl_tahunan
- 完成向导
- 切换到表格
- 打开数据源工具面板(查看菜单、其他 Windows 子菜单)
- 展开数据集名称中的节点
- 将 tbl_tahunan 拖到窗体上
- 运行程序
是的,就是这样,不是你写的一行代码;VS 已经完成了这一切(并且做得更好),这个简单的应用程序将下载、显示、编辑和保存行。我敢打赌它也不会有任何小数问题..
您可以通过阅读 .Designer.cs 文件中的代码来了解它是如何工作的:datagridview 通过 bindingSource 连接到数据表(tbl_tahunandatatable)。当您用数据填充表格时,您将看到网格自动显示数据。您不需要与 datagridview 单元格集合进行交互。数据的所有程序化编辑都应该对数据表进行。这是一个称为 MVC 的概念(模型 - 数据表,视图 - 数据网格视图,控制器 - 有时是处于编辑模式的数据网格视图,有时是其他) - 将 M 与 VC 分开通常有助于构建合理的程序结构
您可以在您创建的这个简单应用程序的基础上进行构建,例如:
- 打开数据集,
- 右键单击 TableAdapter,
- 添加另一个查询,
- 添加带有一些相关 where 子句的查询(类似
SELECT * FROM tbl_tahunan WHERE adhb BETWEEN @from AND @to
) - 称它为一个好名字,比如 FillByAdhbBetween
- 在 UI 中放置一些文本框
- 在调用它的 ui 上放置一个按钮:
tbl_tahunanTableAdapter.FillByAdhbBetween(somedatasetname.tbl_tahunan, Convert.ToDecimal(adhbfromTextbox.Text), Convert.ToDecimal(adhbtoTextbox.Text))
现在网格将只填充一些行而不是全部
就我个人而言,我总是让表适配器中的第一个查询有一个 WHERE 子句,它通过主键进行选择。加载相关数据很方便。我们几乎不想从数据库中选择所有行到我们的程序中
推荐阅读
- docker - 使用 JDBC 输入插件在 Docker 上的 Logstash 不会从 SQL Server 获取所有行
- flutter - 如何突出显示我在字符串中搜索的确切单词,而不仅仅是字符串的开头?
- flutter - 如何实时获取文档长度
- javascript - Reactjs 从获取请求中返回一个对象
- javascript - Nginx 正在尝试打开文件而不是重定向到代理
- python - _joint_log_likelihood 给我错误的值
- sql - 如何按日期获取最后一件商品的价格
- python-3.x - 定期执行功能而不停止其他操作
- r - 使用 R 从 PDF 表单到数据框的文本挖掘
- r - 如果 r 中出现错误,则转到 lapply() 的下一次迭代