我在做作业的时候,我想实现一个功能,就是我点击修改,则datagridview的readonly属性变为false,然后button上面的text“修改” 变为“确定” ,当再次点击button时,有个提示窗口 
当我打击“是”的按钮的时候,datagridview的修改保存并且readonly的属性变为true。备注:datagridview控件的修改内容没有保存到数据库。   我的问题是:我想在我点击“否”按钮的时候,datagridview的显示的数据恢复到修改前的数据,既撤销对datagridview的修改。    谢谢大家的帮助呀。 我想过用事务来处理,但是具体怎么操作我不了解。有什么更加简便的方法吗? 
private void btnChang_Click(object sender, EventArgs e)
        {
           
                               if (btnChang.Text == "修改")
                {
                        btnChang.Text = "确定";
                        dataGridView1.ReadOnly=false;
                    }
                    else
                    {
                        if (MessageBox.Show("确定修改吗?", "询问", MessageBoxButtons.YesNo) == DialogResult.Yes )
                        {
                            
                            dataGridView1.ReadOnly = true;
                            btnChang.Text = "修改";
                            MessageBox.Show("修改成功");
                        }
                        else
                        {
                            dataGridView1.ReadOnly = true;
                        }
                    
                }
                
        }   

解决方案 »

  1.   

    当你去点击按钮,也就是焦点移开表格时,修改就会自动提交,如果要撤销修改,就得看你实际情况了。
    首先你必须告诉我,你的数据源是否是DataTable,如果是,可以利用它的内置方法进行回滚,当点击确定时则提交,如果还要修改数据库,则提交前必须执行数据库更新操作。如果是List<T>数据源,则必须人为记录原始状态,需创建List<T>的副本记录修改前的值。
      

  2.   

    自己做个undo,redo的功能吧,我写个一个文字录入的简单的undo,redo,你可以参考这个思路,自己做一个吧
    http://blog.csdn.net/bdmh/archive/2011/05/17/6426564.aspx
      

  3.   


    可以可以做了删除。。先记录到cookies中。。
      

  4.   

    不好意思,现在才回复你,是datatable数据源。 请问它的内置回滚方法该怎么写呀?  
      

  5.   

    只是一个提交问题 
    与事务什么的无关
    我不知道你对于true和false的象征着什么懂不
      

  6.   


    这个没什么要特别了解的。。删除之前先写一个cookies...把修改之前的信息记录一下。。
      

  7.   

    我觉得这个方法很好,请问具体该怎么写呢?我把选定一行的记录保存在什么地方呢?  然后又怎么将保存的内存再放到datagridview中呢?
      

  8.   

    我不是很懂,我觉得在这里true的含义就是datagridview中的数据是只能读,false是指可以修改。  是吗? 
      

  9.   

    最简单的方法是,点击“否”的时候,重新加载数据源显示。就可以了。只不过不推荐这样,最好写undo和redo