请教...能不能在datagridview中双击一个单元格然后转为编辑模式(这个我会...),然后更改数据后,按回车,或鼠标点击其他地方时自动把更改的新内容上传到数据库呢?

解决方案 »

  1.   

    把控件数据读到表,用表去更新数据库。        public static OleDbDataAdapter 表编辑后更新数据库(string 表达式, DataTable 数据表名, string 数据连接字符串)
            {
                OleDbDataAdapter 数据表更新数据库 = new OleDbDataAdapter(); DataRow 提示 = 数据表名.Rows[0];
                try
                {
                    using (OleDbConnection 打开连接 = new OleDbConnection(数据连接字符串))
                    {
                        数据表更新数据库.SelectCommand = new OleDbCommand(表达式, 打开连接);
                        OleDbCommandBuilder 关联数据库 = new OleDbCommandBuilder(数据表更新数据库);
                        数据表更新数据库.UpdateCommand = 关联数据库.GetUpdateCommand();
                        数据表更新数据库.Update(数据表名);
                        int 影响数 = 数据表名.AcceptChanges(); 
                    }
                    if(影响数 > 0) MessageBox.Show("[" + 提示.ItemArray[3].ToString() + "☆" + 提示.ItemArray[4].ToString() + "],数据保存成功!", "友情提醒", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }
                catch (Exception Ts)
                { MessageBox.Show("表更新:对发生的错误表示抱歉!阐述发生错误时的具体操作过程和错误序号!" + Ts.ToString(), "错误"); }
                finally { }
                return 数据表更新数据库;
            }        private void 生成表()
            {
                string[] 创建 = new string[]{"1","2","3","4","5"};
                DataTable 设定表 = new DataTable();
                设定表.TableName = "设定表";
                foreach (string 数据列 in 创建)
                    条件设定表.Columns.Add(数据列);
                this.BeginInvoke(new Action(delegate()
                {
                    for (int 行 = 0, 数 = 设定.RowCount - 1; 行 < 数; 行++)
                    {
                        设定表.Rows.Add();
                        for (int 列 = 0, 量 = 设定.ColumnCount; 列 < 量; 列++)
                            设定表.Rows[行][列] = 设定.Rows[行].Cells[列].Value;
                    }
                }));
                string 表达式 = "SELECT * FROM _ZiYuan WHERE _IDbiaoji =" + ID;
                表编辑后更新数据库(表达式, 设定表, 数据连接字符串);
            }设定:是个datagridview控件
      

  2.   

    在winform下这个是很简单的。
    1、拖一个DataGridView到面板上
    2、拖一个BindingSource到面板上
    3、在BindingSource的属性中设置DataSource属性(数据库-->数据集-->连接数据库-->选择一个表)
    4、设置该BindingSource的属性DataMenber你要绑定的那张表
    5、在界面上的DataGridView中选择刚才设置的数据源
                该操作会在Form_Load事件中生成如下代码:            // TODO: 这行代码将数据加载到表“testDataSet.a”中。您可以根据需要移动或删除它。
                this.aTableAdapter.Fill(this.testDataSet.a);6、在DataGridView的CellEndEdit事件中添加一句代码:        private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
            {
                //我这里操作的是test数据库的a表(根据实际情况做修改)
                this.aTableAdapter.Update(this.testDataSet.a);
            }
    就这样工作就完成了,这是利用了SqlDataAdapter的UpdateCommand来实现的。
      

  3.   

    谢谢!~效仿了一下,可是datagridview里面的数据改了也更新不到数据库里呢...
      

  4.   

    我添加dataAdapter和dataBuilder试了一下,同样是da.Update((DataTable)bs.DataSource),添加到按钮事件中就可以实现,添加到dataGridView1_CellEndEdit中,就不能更新数据库...为什么呢...
      

  5.   


    你是向我一样全部拖的控件呢?还是自己写的代码呢?
    没更新到数据库?da.Update报错吗?
      

  6.   

     可以把 gridview每个单元格中的数据提取出来 用SQL    update 语句更新
      

  7.   

    完完全全按照您说的,拖得控件,没有报错,但就像我说了,添加的是按钮事件就好用,是不是dataGridView1_CellEndEdit这个事件实施上有问题呢