或是DataSet.HasChanges=false ?

解决方案 »

  1.   

    我是你下面的并发冲突的贴,还没解决,头痛。
    DataSet.AcceptChanges()好像放在update的后面。
      

  2.   

    放在update后面就起不到作用了
    我是GridView后一个汇总行在自动汇总数据时老是出现“不能通过已删除的行来访问该行信息”
    加上DataSet.AcceptChanges()后错误不再出现
    但是没有保存进数据库
      

  3.   

    没有DataSet.AcceptChanges()可以保存进数据库
    但是时不时地出现“不能通过已删除的行来访问该行信息”
      

  4.   

    DataSet.AcceptChanges()之后当然更新不到数据库了。“不能通过已删除的行来访问该行信息”
    dr.delete()后当然不能再访问了。解决办法在统计时不要访问deleted行就行了。不知你统计是怎么自动的?
    应该有统计时写if(dr.RowState != DataRowState.Deleted)
    {
    //......
    }
      

  5.   

    我是在界面汇总的GridView
      

  6.   

    DataSet.AcceptChanges() 应该在你 Update 之后调用!
      

  7.   

    问题没有解决
    我的方法是
      //
            //自动汇总
            //
            private void dataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
            {
                try
                {
                    DataGridView dgv = (DataGridView)sender;
                    if (dgv.Tag == null || e.RowIndex < 0 || e.RowIndex == dgv.Rows.Count - 1) return;                string col = dgv.Columns[e.ColumnIndex].DataPropertyName;
                    //
                    //年龄,雇佣放羊人和是否通电不用汇总
                    //
                    if (col == "HaveElec" || col == "HireSheepHerder" || col == "Age")
                    {
                        return;
                    }
                    if (col == string.Empty) return;
                    if (((DataRowView)dgv.Rows[e.RowIndex].DataBoundItem).Row.Table.Columns[col].DataType.IsValueType)
                    {
                        decimal tal = 0;
                        foreach (DataGridViewRow dgvr in dgv.Rows)
                        {                        if (dgvr.Index != dgv.Rows.Count - 1)
                            {
                                string hej = dgvr.Cells[e.ColumnIndex].Value.ToString();
                                if (hej != string.Empty) tal += decimal.Parse(hej);
                            }
                        }
                        if (tal == 0)
                            dgv[e.ColumnIndex, dgv.Rows.Count - 1].Value = DBNull.Value;
                        else
                            dgv[e.ColumnIndex, dgv.Rows.Count - 1].Value = tal;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("自动汇总数据时出错" + ex.ToString(), "系统提示");
                }        }
      

  8.   

    DataSet.AcceptChanges() 应该在你 Update 之后调用!后起不到作用
    和没用一样
      

  9.   

    我的并发问题自己刚解决了,好高兴。并发问题:
    你的已AcceptChanges()无关。前面数据库的细节问题,“不能通过已删除的行来访问该行信息‘之类的。
    1.主键。2。空内容。3。该删除的行
      

  10.   

    AcceptChanges就是把客户端数据行状态全部'Reset'成UnChanged状态。也就是等于说,就当客户端从数据库读取数据库后从来没有发生过任何改变,没有过增、删、改操作。
      

  11.   

    得先  Update 再 AcceptChanges
      

  12.   

    update 和acceptchanges一般一前一后同时使用。
    update 根据rowstate提交数据,但是不更改rowstate.
    accept的功能如下:
    当调用 AcceptChanges 时,任何仍处于编辑模式的 DataRow 对象都将成功结束其编辑。每个 DataRow 的 RowState 属性也会随之更改;状态为 Added 和 Modified 的行的状态将变为 Unchanged,状态为 Deleted 的行则被移除。acceptchanges 不是用了等与没用。而是它的效果,你通过数据集和数据库是看不出来的,它是搞暗箱操作的。你可以通过rows[0].delete   然后dataview.rowstatefilter() 在之前和之后分别用用,你就可以看出它的效果了。