我想在 DataGridViewCell 上输完值就点工具栏上的保存,并更新到数据库,应该怎么做public class DataBaseAction
{
    private SqlDataAdapter mobjAdapter;
    private SqlCommandBuilder mobjCmdBuilder;
    private DataTable mobjDatatable;    public DataTable AdapterQuery(string sqlstring)
    {
        mobjDatatable = new DataTable();
        mobjAdapter = new SqlDataAdapter(sqlstring, mstrConn);        mobjAdapter.Fill(mobjDatatable);
        return mobjDatatable;
    }    public void UpdateDataBase()
    {
        if (mobjDatatable != null)
        {
            mobjCmdBuilder = new SqlCommandBuilder(mobjAdapter);
            mobjAdapter.Update(mobjDatatable);
        }
    }
}Form 上
DataBaseAction db;
BindingSource bs;private void Form1_Load(object sender, EventArgs e)
{
    db = new DataBaseAction(@"Data Source=127.0.0.1;Initial Catalog=myc;Integrated Security=True");    bs = new BindingSource();
    this.SetData();
}private void SetData()
{
    bs.DataSource = db.AdapterQuery("select * from customs");
    dataGridView1.DataSource = bs;
    bindingNavigator1.BindingSource = bs;
}private void 保存SToolStripButton_Click(object sender, EventArgs e)
{
    dataGridView1.EndEdit();
    db.UpdateDataBase();
    this.SetData();
}

解决方案 »

  1.   

    看你怎么操作。cellvaluechage事件中可以做事情,在你改变的值后,可以更新内存中的数据。
    在你保存之前,更新当前行,并提交
      

  2.   

    UpdateDataBase()这个方法你写错了!
       public void UpdateDataBase()
        {
            if (mobjDatatable != null)
            {
                mobjCmdBuilder = new SqlCommandBuilder(mobjAdapter);
                mobjAdapter.Update(mobjDatatable);
            }
        }
    Update()方法中放入的应该有两个参数,一个是你的要更改的表名,还有一个就是你的 SqlDataAdapter 对象名了,改成这样吧!
      public void UpdateDataBase()
        {
            if (mobjDatatable != null)
            {
                mobjCmdBuilder = new SqlCommandBuilder(mobjAdapter);
                mobjAdapter.Update( mobjDatatable,mobjDatatable);
            }
        }
      

  3.   

    从别处找了个办法解决了这个问题
    this.dataGridView.currentCell=null;
    取消datagridview行的编辑状态哈哈,有点不太好接受啊
      

  4.   

    点保存之前执行下dg的EndEdit函数试试
      

  5.   


    private void 保存SToolStripButton_Click(object sender, EventArgs e)
    {
        //dataGridView1.EndEdit();
        this.Validate();//这个很重要
        db.UpdateDataBase();
        //this.SetData();
    }
    mobjAdapter.Update( mobjDatatable,mobjDatatable); 
    mobjAdapter.AcceptChanges();//
      

  6.   

    发个示例,前几天论坛上有人问这个问题写的.
    toolStrip上添加的button按钮update时要添加this.Validate();using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;namespace WindowsApplication3
    {
        public partial class Form1 : Form
        {
            SqlConnection con;
            SqlDataAdapter da;
            DataTable dt;
            public Form1()
            {
                InitializeComponent();
                con = new SqlConnection("Server=.;Integrated Security=True;Database=Northwind");
                dt = new DataTable();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                da = new SqlDataAdapter();
                da.SelectCommand = new SqlCommand("select * from Employees", con);
                SqlCommandBuilder scb = new SqlCommandBuilder(da);
                da.Fill(dt);
                this.bindingSource1.DataSource = dt;
                this.dataGridView1.DataSource = bindingSource1;
            }        private void toolStripBtnSave_Click(object sender, EventArgs e)
            {
                //更新
                if (dt == null)
                {
                    MessageBox.Show("dt为null");
                    return;
                }
                this.Validate();//这个很重要..没有更新不了.
                da.Update(dt);
                dt.AcceptChanges();
            }
        }
    }