是关于datagridview更新数据库的问题
我想在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);
} --------------------编程问答-------------------- 调试看看cmdBuilder.GetUpdateCommand();
这个对吗? --------------------编程问答--------------------
--------------------编程问答-------------------- 调试一下先
//SqlCommandBuilder 会自动为SqlDataAdapter 生成更新逻辑
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapter);
DataSet ds = new DataSet();
adapter.Fill(ds);
//这一句可以不要!
adapter.UpdateCommand = cmdBuilder.GetUpdateCommand();
//这个要在修改数据后调用,你没有修改数据调用自然不会更新数据库的!
if(ds.HasChanges())
adapter.Update(ds);
--------------------编程问答--------------------
我在是先在datagridview里显示表的所有信息 然后更改里面的一个数据 然后发现数据库里的数据并没有改变
你说的是这一句: adapter.UpdateCommand = cmdBuilder.GetUpdateCommand();
不要吗?? --------------------编程问答-------------------- 还是不行丫。。。 --------------------编程问答-------------------- 你没有update操作怎么实现修改啊;
你要是用sqldatasource可以不写代码实现修改;
如果是自己写代码实现,最起码要在gridview上加编辑列,
然后在gv的编辑事件中写update操作吧。
不知道我理解你的想法对不对 --------------------编程问答-------------------- 还有你的数据绑定,再这个按钮事件中也没有啊 --------------------编程问答-------------------- 提示的出错信息是什么了? --------------------编程问答--------------------
.怎么绑定??按钮事件也要绑定么?? --------------------编程问答-------------------- ,没有啊。没有出错信息,只是数据库没有更新 --------------------编程问答--------------------
请问怎么 用sqldatasource可以不写代码实现修改 帮忙一下 --------------------编程问答--------------------
后台代码:
你可以使用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>
网上有好多的 --------------------编程问答-------------------- datagridview默认要改变行焦点后才会更新内存的dataset或datatable,你改了一个数据,直接点保存(
即执行adapter的update,因为本地内存的dataset并未更新,当然也不会更新服务器的数据了) --------------------编程问答--------------------
什么情况? --------------------编程问答-------------------- adapter.Fill(ds);
adapter.UpdateCommand = cmdBuilder.GetUpdateCommand();
只有在Fill和Update之间对ds(内的DataTable)做的添,删,改操作才会被更新入数据库
GetUpdateCommand只是为SqlDataAdapter生成Update命令,不是得到对表的更改
adapter.Update(ds);
通常Fill会放在Form_Load事件中,用以载入初始值
补充:.NET技术 , C#