是关于datagridview更新数据库的问题

linzhuxuan 2010-06-01 10:40:29
我想在datagridview里直接更新数据 使得数据库里的数据也更新 但是发现数据库里的数据还是没有更新 为什么??请大家帮忙想办法
我的代码是:
private void button4_Click(object sender, EventArgs e)
{

System.Data.SqlClient.SqlConnection SqlConnection1;
SqlConnection1 = new SqlConnection();
SqlConnection1.ConnectionString =
"data source=WWW-33D83F0FF89;initial catalog =Jia服装销售系统数据库;" +
"integrated security=SSPI;persist security info=False;"
+ "workstation id=WWW-33D83F0FF89;packet size=568";

SqlConnection1.Open();
SqlDataAdapter adapter = new SqlDataAdapter("select * from Stock", SqlConnection1);
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapter);
DataSet ds = new DataSet();
adapter.Fill(ds);
adapter.UpdateCommand = cmdBuilder.GetUpdateCommand();

adapter.Update(ds);



}
...全文
397 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
WAN 2012-02-21
  • 打赏
  • 举报
回复
adapter.Fill(ds);
adapter.UpdateCommand = cmdBuilder.GetUpdateCommand();

只有在Fill和Update之间对ds(内的DataTable)做的添,删,改操作才会被更新入数据库
GetUpdateCommand只是为SqlDataAdapter生成Update命令,不是得到对表的更改

adapter.Update(ds);

通常Fill会放在Form_Load事件中,用以载入初始值
colaHK 2012-02-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wedding123 的回复:]
datagridview默认要改变行焦点后才会更新内存的dataset或datatable,你改了一个数据,直接点保存(
即执行adapter的update,因为本地内存的dataset并未更新,当然也不会更新服务器的数据了)
[/Quote]
什么情况?
wedding123 2011-10-27
  • 打赏
  • 举报
回复
datagridview默认要改变行焦点后才会更新内存的dataset或datatable,你改了一个数据,直接点保存(
即执行adapter的update,因为本地内存的dataset并未更新,当然也不会更新服务器的数据了)
asboboxsb 2010-06-02
  • 打赏
  • 举报
回复
后台代码:
你可以使用sqlhelper,本文没用。代码如下:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
//清清月儿http://blog.csdn.net/21aspnet
SqlConnection sqlcon;
SqlCommand sqlcom;
string strCon = "Data Source=(local);Database=数据库名;Uid=帐号;Pwd=密码";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bind();
}
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
bind();
}
//删除
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
string sqlstr = "delete from 表 where id='" + GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";
sqlcon = new SqlConnection(strCon);
sqlcom = new SqlCommand(sqlstr,sqlcon);
sqlcon.Open();
sqlcom.ExecuteNonQuery();
sqlcon.Close();
bind();
}
//更新
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
sqlcon = new SqlConnection(strCon);
string sqlstr = "update 表 set 字段1='"
+ ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim() + "',字段2='"
+ ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim() + "',字段3='"
+ ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim() + "' where id='"
+ GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";
sqlcom=new SqlCommand(sqlstr,sqlcon);
sqlcon.Open();
sqlcom.ExecuteNonQuery();
sqlcon.Close();
GridView1.EditIndex = -1;
bind();
}
//取消
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;
bind();
}
//绑定
public void bind()
{
string sqlstr = "select * from 表";
sqlcon = new SqlConnection(strCon);
SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);
DataSet myds = new DataSet();
sqlcon.Open();
myda.Fill(myds, "表");
GridView1.DataSource = myds;
GridView1.DataKeyNames = new string[] { "id" };//主键
GridView1.DataBind();
sqlcon.Close();
}
}

前台主要代码:
... ...
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4"
ForeColor="#333333" GridLines="None" OnRowDeleting="GridView1_RowDeleting" OnRowEditing="GridView1_RowEditing"
OnRowUpdating="GridView1_RowUpdating" OnRowCancelingEdit="GridView1_RowCancelingEdit">
<FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<Columns>
<asp:BoundField DataField="身份证号码" HeaderText="用户ID" ReadOnly="True" />
<asp:BoundField DataField="姓名" HeaderText="用户姓名" />
<asp:BoundField DataField="员工性别" HeaderText="性别" />
<asp:BoundField DataField="家庭住址" HeaderText="家庭住址" />
<asp:CommandField HeaderText="选择" ShowSelectButton="True" />
<asp:CommandField HeaderText="编辑" ShowEditButton="True" />
<asp:CommandField HeaderText="删除" ShowDeleteButton="True" />
</Columns>
<RowStyle ForeColor="#000066" />
<SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
<HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
</asp:GridView>

网上有好多的
linzhuxuan 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 asboboxsb 的回复:]
你没有update操作怎么实现修改啊;
你要是用sqldatasource可以不写代码实现修改;
如果是自己写代码实现,最起码要在gridview上加编辑列,
然后在gv的编辑事件中写update操作吧。

不知道我理解你的想法对不对
[/Quote]
请问怎么 用sqldatasource可以不写代码实现修改 帮忙一下
linzhuxuan 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 pc_242 的回复:]
提示的出错信息是什么了?
[/Quote],没有啊。没有出错信息,只是数据库没有更新
linzhuxuan 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 asboboxsb 的回复:]
还有你的数据绑定,再这个按钮事件中也没有啊
[/Quote]
.怎么绑定??按钮事件也要绑定么??
pc_242 2010-06-01
  • 打赏
  • 举报
回复
提示的出错信息是什么了?
asboboxsb 2010-06-01
  • 打赏
  • 举报
回复
还有你的数据绑定,再这个按钮事件中也没有啊
asboboxsb 2010-06-01
  • 打赏
  • 举报
回复
你没有update操作怎么实现修改啊;
你要是用sqldatasource可以不写代码实现修改;
如果是自己写代码实现,最起码要在gridview上加编辑列,
然后在gv的编辑事件中写update操作吧。

不知道我理解你的想法对不对
linzhuxuan 2010-06-01
  • 打赏
  • 举报
回复
还是不行丫。。。
linzhuxuan 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 computerfox 的回复:]
C# code

//SqlCommandBuilder 会自动为SqlDataAdapter 生成更新逻辑
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapter);
DataSet ds = new DataSet();
adapter.Fill(ds);
//这一句可以不要!
adapte……
[/Quote]

我在是先在datagridview里显示表的所有信息 然后更改里面的一个数据 然后发现数据库里的数据并没有改变
你说的是这一句: adapter.UpdateCommand = cmdBuilder.GetUpdateCommand();
不要吗??
linzhuxuan 2010-06-01
  • 打赏
  • 举报
回复
调试一下先
捷哥1999 2010-06-01
  • 打赏
  • 举报
回复

//SqlCommandBuilder 会自动为SqlDataAdapter 生成更新逻辑
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapter);
DataSet ds = new DataSet();
adapter.Fill(ds);
//这一句可以不要!
adapter.UpdateCommand = cmdBuilder.GetUpdateCommand();
//这个要在修改数据后调用,你没有修改数据调用自然不会更新数据库的!
if(ds.HasChanges())
adapter.Update(ds);
zjtpiaoxue 2010-06-01
  • 打赏
  • 举报
回复
调试看看cmdBuilder.GetUpdateCommand();
这个对吗?

111,092

社区成员

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

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

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