绑定DataTable的Datagridview怎么更新 datagridview 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 绑定了datatable(后台数据源)之后,数据源里的数据变化,表格里的数据就会跟着变化前提是,datatable是引用类型,不要重新new,重新new过的dt就跟绑定表格的那个没有任何关系了 如果你的代码里不得不重新new datatable(比如使用的数据库操作类就是返回一个新的datatable而不是更新现有的),那么你需要将新的datatable重新绑定到控件,控件就更新了 你说的有点让我头晕,刚开始用这个控件,感觉好多都不明白,总觉得有比Listview更快捷的方式但是又不会。上面少了这么一句DataTable dt = this.dataGridView.DataSource as DataTable;你看能不能给 今天试了发现异常Dynamic SQL generation is not supported against multiple base tables.using (OleDbConnection conn = new OleDbConnection(con)) { try { if (conn.State == ConnectionState.Closed) { conn.Open(); } string sql = "select " + "表1.姓名," + "表1.性别," + "表1.年龄," + "表1.手机," + "表1.邮箱," + "表2.部门," + "表2.职位," + "表2.职责," + "表2.备注" + " from [表1] inner join [表2] on 表2.姓名=表1.姓名"; DataTable dt = new DataTable(); using (OleDbDataAdapter da = new OleDbDataAdapter(sql, conn)) { da.Fill(dt); } this.dataGridView.AutoGenerateColumns = false; this.dataGridView.DataSource = dt; }using (OleDbConnection cCon = new OleDbConnection(con)) { string sql = "select " + "表1.姓名," + "表1.性别," + "表1.年龄," + "表1.手机," + "表1.邮箱," + "表2.部门," + "表2.职位," + "表2.职责," + "表2.备注" + " from [表1] inner join [表2] on 表2.姓名=表1.姓名"; OleDbDataAdapter da = new OleDbDataAdapter(sql, cCon); OleDbCommandBuilder cBu = new OleDbCommandBuilder(da); DataTable dt = this.dataGridView.DataSource as DataTable; try { da.Update(dt); dt.AcceptChanges(); MessageBox.Show("数据保存完成!"); } 这是告诉你这个数据库不支持多表查询你不会是把多个excel工作簿当成数据表在操作吧?? 先用数据库客户端执行你的SQL语句,确认没问题了再放到代码里去 我的是Access数据库,我应该要怎么操作? 哦,我知道你到底是什么问题了你这根本不是"Datagridview怎么更新",而是要把Datagridview里的数据更新回数据库那么绑定了多表,当然是更新不回去的了你得学会自己写sql语句更新,不要只知道绑定Datagridview 单表绑定为什么可以更新回去呢?只能一行行用SQL语句再更新数据库吗? 那按照你们的经验应该要怎么操作这种情况?遍历Datagridview的行进行SQL语句多表更新?或者有什么更快的方法吗?总感觉这样好麻烦 根据我们的经验,多表查询的数据就不应该更新回去.这已经不是原始数据了.或者其实你只是某些字段想替换成汉字,完全可以使用另外的手段实现,比如在表格里添加combobox类型的列,绑定displaymember和valuemember,让它显示汉字,但是值还是跟数据库中一致而且不要只会绑定来绑定去的,也该学学如何sql语句更新数据库了.不要老怕麻烦,其实就是一个循环而已 是这样的,因为大家都习惯了Excel表格,几个人的工作分前后,又各分表格,但是大部分数据是A人的表拷贝到B人的表,B人再在自己的这个表再加几列,这样表格就太多了,想要跟踪进度都比较困难,我现在想整合大家。之前我同部门几个人的表我都采用的是Listview显示,双击一行后弹窗显示修改的。我不是怕写更新SQL的麻烦,我是怕影响速度,到时候速度还不如Excel方便。大家都不愿意整合了,就没什么意义。 为什么要用ListView,而且这种数据有什么需要多表查询的吗,不是每个人一张表而已吗而且你即使使用了绑定控件的方式,后台依然还是变成sql语句循环插入或批量插入,给你封装了一下而已想批量插入,你可以把多条insert语句拼接到一个sql里一次执行 这也是我学习C#的过程,刚开始是接触Listview,所以最先用那个作为工作任务清单,同部门的几个人同时操作(我们开始是用的Excel共享功能),现在是因为其他人需要像Excel那样编辑,所以开始学习使用Datagridview,为什么多张表呢,是因为A人的表的一部分字段是B人的表的基础,B人的表自己有另外的字段依据这些字段,B人的表的一部分呢又是C人的表的基础,就像做产品流程一样。我没有做过这种QA流程,所以走了好多弯路。 请求用代码写的Hash码算法 菜鸟的问题,多谢各位帮忙,人人有分~~~~~ 四舍五入 winform中TreeView的问题. FileSystemWatcher.InternalBufferSize 在我的C#中找不到这个属性 为什么点击登录没有反应,就指教 .net调用斑马USB打印机打印 15.625毫秒(1/64秒)这个特殊的数值含义 使用NUnit测试时出现错误,在线等...请帮助 xml解析问题 谢谢大家帮帮忙啊~~~ 能不能给我个c#计算器,不要太复杂 飞信软件安装包中包含.net虚拟机,是怎么做到的?
前提是,datatable是引用类型,不要重新new,重新new过的dt就跟绑定表格的那个没有任何关系了
{
try
{
if (conn.State == ConnectionState.Closed) { conn.Open(); }
string sql = "select " +
"表1.姓名," +
"表1.性别," +
"表1.年龄," +
"表1.手机," +
"表1.邮箱," +
"表2.部门," +
"表2.职位," +
"表2.职责," +
"表2.备注" +
" from [表1] inner join [表2] on 表2.姓名=表1.姓名";
DataTable dt = new DataTable();
using (OleDbDataAdapter da = new OleDbDataAdapter(sql, conn))
{
da.Fill(dt);
}
this.dataGridView.AutoGenerateColumns = false;
this.dataGridView.DataSource = dt;
}using (OleDbConnection cCon = new OleDbConnection(con))
{
string sql = "select " +
"表1.姓名," +
"表1.性别," +
"表1.年龄," +
"表1.手机," +
"表1.邮箱," +
"表2.部门," +
"表2.职位," +
"表2.职责," +
"表2.备注" +
" from [表1] inner join [表2] on 表2.姓名=表1.姓名";
OleDbDataAdapter da = new OleDbDataAdapter(sql, cCon);
OleDbCommandBuilder cBu = new OleDbCommandBuilder(da);
DataTable dt = this.dataGridView.DataSource as DataTable;
try
{
da.Update(dt);
dt.AcceptChanges();
MessageBox.Show("数据保存完成!");
}
你不会是把多个excel工作簿当成数据表在操作吧??
你这根本不是"Datagridview怎么更新",而是要把Datagridview里的数据更新回数据库
那么绑定了多表,当然是更新不回去的了
你得学会自己写sql语句更新,不要只知道绑定Datagridview
或者有什么更快的方法吗?总感觉这样好麻烦
或者其实你只是某些字段想替换成汉字,完全可以使用另外的手段实现,比如在表格里添加combobox类型的列,绑定displaymember和valuemember,让它显示汉字,但是值还是跟数据库中一致
而且不要只会绑定来绑定去的,也该学学如何sql语句更新数据库了.不要老怕麻烦,其实就是一个循环而已
而且这种数据有什么需要多表查询的吗,不是每个人一张表而已吗
而且你即使使用了绑定控件的方式,后台依然还是变成sql语句循环插入或批量插入,给你封装了一下而已
想批量插入,你可以把多条insert语句拼接到一个sql里一次执行