您好,感谢您阅读此帖,我的问题是如何判断DataGridView里面的数据已经被修改我已经在百度找了好多资料,始终没有解决.
下面是我的代码,大家帮我看看问题在哪里
绑定DataGridView的代码                dgvSysPara.DataSource = DataBindPro.GetSysPara(outputBytes);
                dgvSysPara.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
                dgvSysPara.Rows[0].Frozen = true;
我用一个Button事件判断是否被修改
private void button1_Click(object sender, EventArgs e)
        {
            DataTable dt = (DataTable)dgvSysPara.DataSource;
            DataTable drc = dt.GetChanges(DataRowState.Modified);
            if (drc != null)
            {
                MessageBox.Show("数据已修改");
            }
        }但是drc的值在我修改了内容后还是为空.
即使改成下面这样:private void button1_Click(object sender, EventArgs e)
        {
            DataTable dt = (DataTable)dgvSysPara.DataSource;
            DataRowCollection drc = dt.GetChanges(DataRowState.Modified).Rows;
            foreach (DataRow dr in drcc)
            {
                if (dr.RowState == DataRowState.Modified)
                {
                    MessageBox.Show("数据已修改");
                }
            }
        }dr.RowState的值也始终是Added.
请问我应该怎么做才能判断DataGridView是否已经被修改了呢,,还有其它的方法吗?希望知道的朋友帮帮我,不胜感激,顺祝大家工作顺利!圣诞快乐!

解决方案 »

  1.   

    改了后有没有切换一下行呢?编辑一行, 焦点离开编辑的那个行, DataRow 才获知改变,或者主动调用 EndEdit.
      

  2.   

    上面的代码foreach (DataRow dr in drcc)
    本来是foreach (DataRow dr in drc)的,呵呵代码调试的时候是没有问题的..请问 Dobzhansky,具体应该怎么做呢?
      

  3.   

    你好,DataGridView 有个捕获Cell值已更改的事件:
    private void dgv_CellValueChanged(object sender, DataGridViewCellEventArgs e)
            {
                //Do Something
            }
      

  4.   

    ((CurrencyManager)this.BindingContext[dgvSysPara.DataSource]).EndCurrentEdit();
      

  5.   

    dgv_CellValueChanged事件在绑定的时候就会发生了,请问要怎样才能代表它的值真正被改变呢?
      

  6.   

    请问 Dobzhansky,能不能具体点我刚从Webform转过来,对Winform不熟,我现在还是不知道应该怎么做..
      

  7.   


    那就在你绑定完后再注册这个事件
    this.dgv.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgv_CellValueChanged);
      

  8.   

    private void grd_CurrentCellDirtyStateChanged(object sender, EventArgs e)
    {
    if(grd.IsCurrentCellDirty)
    grd.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
      

  9.   

    DataSet.HasChanges  
    datagridview_enter事件
      

  10.   


    wuyq11,你好,请问这两个应该怎么用呢
      

  11.   

    问题已解决,在更改值的时候会触发这个事件,我在这个事件中通过改变一个全局变量的值来标识值是否已经被改变private void grd_CurrentCellDirtyStateChanged(object sender, EventArgs e) 

    if(grd.IsCurrentCellDirty) 
    grd.CommitEdit(DataGridViewDataErrorContexts.Commit); 
    }