断开式数据库连接 datagridview如何把修改的数据写入dataset中

talenter 2011-10-14 11:24:20
我现在遇到的情况是,我在窗体的加载时打开数据库,然后断开连接,我在datagridview中,修改完数据,再次打开连接,但是dataset中的数据没有变化,但我只要一直保持连接dataset就有变化了,这是怎么回事,哪位高手解答下!
...全文
328 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
cgeng 2011-11-09
  • 打赏
  • 举报
回复
datagrid.EndEdit();
风骑士之怒 2011-10-16
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 shou_ji_dang 的回复:]
楼上的修改后不把DataGridView重新写成DataSet就能保存DataSet更新的数据?真神奇
[/Quote]

建议LZ去反编译相关类,查看其修改操作后,对当前绑定数据源的相关操作
hudenq 2011-10-14
  • 打赏
  • 举报
回复
不管你断不断开,只要你绑定dataset,在你修改datagridview数据时,dataset数据已修改,你可以连接数据库,通过SqlDataAdapter.Update更新数据
talenter 2011-10-14
  • 打赏
  • 举报
回复
我要的就是通过断开连接,修改datagridview数据,然后再连接数据库,通过SqlDataAdapter更新数据。
风骑士之怒 2011-10-14
  • 打赏
  • 举报
回复

编辑单元格后更新数据到数据库,可以在CellEndEdit事件中编写代码,利用SqlCommandBuilder构造SQL语句,利用SqlDataAdapter 将DataSet更新到数据库


private DataSet ds = new DataSet();
private SqlDataAdapter da = new SqlDataAdapter();
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

SqlConnection con = new SqlConnection("server=.;user id=sa;pwd=111;database=A");
con.Open();
SqlCommand cmd = new SqlCommand("select * from member", con);
da.SelectCommand = cmd;
da.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
}

private void UpdateData()
{
SqlCommandBuilder cbr = new SqlCommandBuilder(da);
da.Update(ds);
}
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
UpdateData();
}


你还可以处理
UserAddedRow
UserDeletedRow
这几个事件

这个例子没关注数据库连接关闭的问题,仅测试更新
宝_爸 2011-10-14
  • 打赏
  • 举报
回复
再连接时,要通过DataAdapter更新数据到数据库。
sdl2005lyx 2011-10-14
  • 打赏
  • 举报
回复
这是因为:断开连接,修改完数据的数据并没有更新到数据库里面,你读到的都是原来的数据。

至少:要在读取、保存数据时,开启连接!
风骑士之怒 2011-10-14
  • 打赏
  • 举报
回复
dataset数据没更新到数据库
神棍 2011-10-14
  • 打赏
  • 举报
回复
神马叫一直保持连接?Fill到DataSet不就是无连接状态么.
talenter 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 alisa731 的回复:]

直接对DataSet的Table操作,不要单纯的更改DataGridView
[/Quote]

那datagridview与dateset没有手工的相互绑定?
大工在大河南 2011-10-14
  • 打赏
  • 举报
回复
直接对DataSet的Table操作,不要单纯的更改DataGridView
talenter 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wknight_it 的回复:]
Form1上放一个DataGridView和Button


C# code


public partial class Form1 : Form
{
private DataSet ds = new DataSet();
public Form1()
{
InitializeComponent……
[/Quote]


不对吧,你应该还有其他的东西吧,你是怎样把datagridview的数据回写给dataset的??
shou_ji_dang 2011-10-14
  • 打赏
  • 举报
回复
楼上的修改后不把DataGridView重新写成DataSet就能保存DataSet更新的数据?真神奇
风骑士之怒 2011-10-14
  • 打赏
  • 举报
回复
Form1上放一个DataGridView和Button


public partial class Form1 : Form
{
private DataSet ds = new DataSet();
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

using (SqlConnection con = new SqlConnection("server=.;user id=sa;pwd=111;database=A"))
{
con.Open();
SqlCommand cmd = new SqlCommand("select * from member", con);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(ds);
}
dataGridView1.DataSource = ds.Tables[0];
}

private void UpdateData()
{
using (SqlConnection con = new SqlConnection("server=.;user id=sa;pwd=111;database=A"))
{
con.Open();
SqlCommand cmd = new SqlCommand("select * from member", con);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
SqlCommandBuilder cbr = new SqlCommandBuilder(da);
da.Update(ds);
}
}

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
UpdateData();
}

private void dataGridView1_UserAddedRow(object sender, DataGridViewRowEventArgs e)
{
UpdateData();
}

private void dataGridView1_UserDeletedRow(object sender, DataGridViewRowEventArgs e)
{
UpdateData();
}

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(ds.Tables[0].Rows.Count.ToString());
}
}


我添加、删除、修改数据,都能更新到数据库的,而且按钮单击查ds数据,都是正确的
风骑士之怒 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 talenter 的回复:]
怎么还是不行! 查了下dataset的行数,并未发生变化!
[/Quote]
我这个例子只是在修改单元格的数据后,更新到数据库的,怎么会有行的数量变化

你是允许我的例子,还是你自己写的?
talenter 2011-10-14
  • 打赏
  • 举报
回复
怎么还是不行! 查了下dataset的行数,并未发生变化!
风骑士之怒 2011-10-14
  • 打赏
  • 举报
回复

private void UpdateData()
{
using (SqlConnection con = new SqlConnection("server=.;user id=sa;pwd=111;database=A"))
{
con.Open();
SqlCommand cmd = new SqlCommand("select * from member", con);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
SqlCommandBuilder cbr = new SqlCommandBuilder(da);

da.Update(ds);
}
}
风骑士之怒 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 talenter 的回复:]
我要的就是通过断开连接,修改datagridview数据,然后再连接数据库,通过SqlDataAdapter更新数据。
[/Quote]

你将我的代码修改一下呗,很简单啊,在UpdateData方法里面重新写一遍连接数据库的操作
风骑士之怒 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 talenter 的回复:]
我要的就是通过断开连接,修改datagridview数据,然后再连接数据库,通过SqlDataAdapter更新数据。
[/Quote]

你断开连接后,数据在DataSet里面

你要想保存数据到数据库,还得重新连接数据库,

111,088

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧