我需要从 DataGridView 到 dataSet我现在要得到一个DataSet 从DataGridView 中得到。           DataSet ds = new DataSet();
           DataTable dt = new DataTable();
           dt = (DataTable)DataGridView.DataSource;
           ds.Tables.Add(dt); 出现这样一个错误:
         DataTable 已属于另一个 DataSet。

解决方案 »

  1.   

               DataSet ds = new DataSet(); 
               DataTable dt = new DataTable(); 
               dt = (DataTable)DataGridView.DataSource; 
               ds.Tables.Add(dt.copy()); 
      

  2.   

    DataSet,DataTable均是引用类型,所以使用的时候要注意,一楼的方法是可以实现的.
    dt.copy():新的 DataTable,它具有与该 DataTable 相同的结构(表架构和约束)和数据。 
      

  3.   

    谢谢了。问题 解决了。可又出新问题了。public bool updateSearch(string str, DataSet ds)
            {
                bool bl = false;
                //若连接数据库失败抛出错误
                
                DataSet dataSet = ds;
                m_sqlCommand.CommandType = System.Data.CommandType.Text;
                m_sqlCommand.CommandText = str;
                m_sqlDataAdapter = new OleDbDataAdapter();
                m_sqlDataAdapter.SelectCommand = m_sqlCommand;
                try
                {
                    OleDbCommandBuilder SqlCd = new OleDbCommandBuilder(m_sqlDataAdapter);                m_sqlDataAdapter.Update(ds, ds.Tables[0].TableName);
                }
                catch (OleDbException e)
                {
                }
                return bl;
            }
    报出这样一个错误:
      对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。
    怎么解决呢。
      

  4.   

    使用OleDbCommandBuilder 自动生成dataadapter的insertcommand,   updatecommand,   和deletecommand属性。   为了支持自动生成,   指定的selectcommand必须包含主键或唯一性列。   如果没有,   则无法生成insertcommand,   updatecommand,   和deletecommand,并会抛出invalidoperation异常。     
      

  5.   

    问题解决了。
    是因为在select 语句中没有选择主键