private OleDbConnection connection = null;
private OleDbCommand selectCommand = null;
private OleDbDataAdapter dataAdapter = null;connection = new OleDbConnection(connectionString);
 selectCommand = connection.CreateCommand();
 string sql_xfxm_bdgv = "select * from xfxmb ";
selectCommand.CommandText = sql_xfxm_bdgv;
dataAdapter = new OleDbDataAdapter();
 dataAdapter.SelectCommand = selectCommand;
 DataTable data = new DataTable();
 dataAdapter.Fill(data);
 this.GridView_XFXM.DataSource = data;OleDbCommandBuilder builder = new OleDbCommandBuilder(dataAdapter);
dataAdapter.UpdateCommand = builder.GetUpdateCommand();
 dataAdapter.InsertCommand = builder.GetInsertCommand();
 dataAdapter.DeleteCommand = builder.GetDeleteCommand();
 this.GridView_XFXM.Columns[0].HeaderCell.Value = "序号";
 this.GridView_XFXM.Columns[1].HeaderCell.Value = "推荐日期";
 this.GridView_XFXM.Columns[2].HeaderCell.Value = "消费名称";
 this.GridView_XFXM.Columns[2].Width = 230;
 this.GridView_XFXM.Columns[3].HeaderCell.Value = "金额";
 this.GridView_XFXM.Columns[4].HeaderCell.Value = "操作员";
删除
if(MessageBox.Show("确定要保存所做的修改吗?","系统提示!",MessageBoxButtons.OKCancel,MessageBoxIcon.Question)==DialogResult.OK)
            {
                DataTable data = (DataTable)this.GridView_XFXM.DataSource;
                DataTable changedData =data.GetChanges();                if(changedData!=null)
                {
                   dataAdapter.Update(changedData);
                   data.AcceptChanges();
                   //释放资源
                   
                }
            }问题一:能不能把这个方法进行封装,也就是传入参数(DataGridView dgv,Procedure pro,Sqlparameter[] paras)
初始化类,那么就可以获得实例,去执行DataSource=data的数据源绑定和数据的修改工作。
因为不是一个DataGridView使用这个功能,很多页面要用,不能都写在.cs文件中吧?问题二:可不可以为DataGridView先绑定一个数据源DataTable,然后再用一个SqlDataAdapter把更新过的数据源传回服务器。注意这里的DataTable是在BLL中返回的,而非这个“SqlDataAdapter”生成的,也就是说“SqlDataAdapter”还没有关联到数据库,请问这个功能可以实现吗?怎样实现???

解决方案 »

  1.   

    建议还是普通的一条条sql语句来更新内容吧,整表更新效率上不可取,另外你更新的时候,同样的一条条提交的,为什么还要加个中间的内存DataTable,另外你写好的功能,放在放在dll,由aspx来调用。当然你上面的功能能实现,只是从效率上来讲,不可取,如果说功能的话,同样的更新,直接更新到数据库可靠性更高。
      

  2.   

    DataGridView只是表现层的东西,你应该通过DataTable来传递数据。
    楼主可以参考下ms的SqlHelper来写数据访问层。
      

  3.   

    另外lz的代码中,如果把OleDbCommandBuilder builder = new OleDbCommandBuilder(dataAdapter);放到Fill前面,下面的3句就可以不用写了。
    dataAdapter.UpdateCommand = builder.GetUpdateCommand();
    dataAdapter.InsertCommand = builder.GetInsertCommand();
    dataAdapter.DeleteCommand = builder.GetDeleteCommand();
      

  4.   


    因为全部使用的是存储过程,DataTable只是一个返回的查询记录集啊。你的意思是不是通过判断DataGridView中那几行做了改变,然后只是对信息改变的行的信息进行更新就可以了啊
      

  5.   

    dataAdapter = new OleDbDataAdapter();
     dataAdapter.SelectCommand = selectCommand;
     DataTable data = new DataTable();
     dataAdapter.Fill(data);
    这样不行吧,需要有个 sqlcommandbuider 吧
      

  6.   

    public static DataSet getDataset(string sql, string table)
        {
            SqlConnection con = new SqlConnection () ;       
            con.Open();
            SqlDataAdapter sda = new SqlDataAdapter(sql, con);
            DataSet ds = new DataSet();
            sda.Fill(ds, table);
            return ds;
        
        }