当前位置:编程学习 > C#/ASP.NET >>

是关于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);
--------------------编程问答-------------------- 调试一下先
--------------------编程问答--------------------
引用 2 楼 computerfox 的回复:
C# code

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


我在是先在datagridview里显示表的所有信息 然后更改里面的一个数据  然后发现数据库里的数据并没有改变
你说的是这一句: adapter.UpdateCommand = cmdBuilder.GetUpdateCommand();
不要吗?? --------------------编程问答-------------------- 还是不行丫。。。 --------------------编程问答-------------------- 你没有update操作怎么实现修改啊;
你要是用sqldatasource可以不写代码实现修改;
如果是自己写代码实现,最起码要在gridview上加编辑列,
然后在gv的编辑事件中写update操作吧。

不知道我理解你的想法对不对 --------------------编程问答-------------------- 还有你的数据绑定,再这个按钮事件中也没有啊 --------------------编程问答-------------------- 提示的出错信息是什么了? --------------------编程问答--------------------
引用 7 楼 asboboxsb 的回复:
还有你的数据绑定,再这个按钮事件中也没有啊

.怎么绑定??按钮事件也要绑定么?? --------------------编程问答--------------------
引用 8 楼 pc_242 的回复:
提示的出错信息是什么了?
,没有啊。没有出错信息,只是数据库没有更新 --------------------编程问答--------------------
引用 6 楼 asboboxsb 的回复:
你没有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并未更新,当然也不会更新服务器的数据了) --------------------编程问答--------------------
引用 13 楼 wedding123 的回复:
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#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,