你可以循环gridview,把你要取得列全部读出来,同时也要读出每一行的主键,然后用sql完成更新

解决方案 »

  1.   

    修改datagrid中的数据其实是修改绑定的dataset,可以写一个updatedataset方法直接更新到数据库,参考下面的代码
    /// <summary>
            /// 更新一个结果集
            /// </summary>
            /// <param name="sql">产生结果集的SQL语句</param>
            /// <param name="dataSet">发生改变的结果集</param>
            /// <param name="srcTable">数据表名</param>
            /// <param name="continueUpdateOnError"> 产生异常时是否继续更新</param>
            /// <param name="transaction">事务</param>
            /// <returns>影响的行数</returns>
            public static int UpdateDataSet(string sql, DataSet dataSet, string srcTable, bool continueUpdateOnError,
                SqlTransaction transaction)
            {
                int count = -1;            SqlDataAdapter da = new SqlDataAdapter(sql, transaction.Connection);
                da.SelectCommand = new SqlCommand();
                da.SelectCommand.Connection = transaction.Connection;
                da.SelectCommand.CommandText = sql;            da.ContinueUpdateOnError = continueUpdateOnError;
                SqlCommandBuilder cmb = new SqlCommandBuilder();
                cmb.DataAdapter = da;
                cmb.ConflictOption = ConflictOption.OverwriteChanges;            da.SelectCommand.Transaction = transaction;
                da.InsertCommand = cmb.GetInsertCommand();
                da.InsertCommand.Transaction = transaction;
                da.DeleteCommand = cmb.GetDeleteCommand();
                da.DeleteCommand.Transaction = transaction;
                da.UpdateCommand = cmb.GetUpdateCommand();
                da.UpdateCommand.Transaction = transaction;
                count = da.Update(dataSet, srcTable);
                return count;
            }        /// <summary>
            /// 更新一个结果集
            /// </summary>
            /// <param name="sql">产生结果集的SQL语句</param>
            /// <param name="dataSet">发生改变的结果集</param>
            /// <param name="srcTableIndex">数据表的Index</param>
            /// <param name="continueUpdateOnError">产生异常时是否继续更新</param>
            /// <param name="transaction">事务</param>
            /// <returns>影响的行数</returns>
            public static int UpdateDataSet(string sql, DataSet dataSet, int srcTableIndex,
                bool continueUpdateOnError,
                SqlTransaction transaction)
            {
                string srcTableName = dataSet.Tables[srcTableIndex].TableName;
                return UpdateDataSet(sql, dataSet, srcTableName, continueUpdateOnError, transaction);
            }        /// <summary>
            /// 更新一个结果集
            /// </summary>
            /// <param name="sql">产生结果集的SQL语句</param>
            /// <param name="dataSet">发生改变的结果集</param>
            /// <param name="continueUpdateOnError">产生异常时是否继续更新</param>
            /// <param name="transaction">事务</param>
            /// <returns>影响的行数</returns>
            public static int UpdateDataSet(string sql, DataSet dataSet,
                bool continueUpdateOnError,
                SqlTransaction transaction)
            {
                return UpdateDataSet(sql, dataSet, 0, continueUpdateOnError, transaction);
            }        /// <summary>
            /// 更新一个结果集
            /// </summary>
            /// <param name="sql">产生结果集的SQL语句</param>
            /// <param name="ds">发生改变的结果集</param>
            /// <param name="continueUpdateOnError"> 产生异常时是否继续更新</param>
            /// <returns>影响的行数</returns>
            public static int UpdateDataSet(string sql, DataSet dataSet, bool continueUpdateOnError)
            {
                int count = -1;            SqlConnection con = new SqlConnection(SysConnectionString);
                con.Open();
                SqlTransaction transaction = con.BeginTransaction();
                try
                {
                    count = UpdateDataSet(sql, dataSet, continueUpdateOnError, transaction);
                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    throw ex;
                }
                finally
                {
                    con.Close();
                }
                return count;
            }
      

  2.   

    有楼上那么麻烦吗?初始化dataAdapter就行了呀,更新就是在点击保存按钮时调用一下Update(dt)就行了呗。