一个winform 窗体里放一个DataGridView 
如果DataGridView 内容有改变 关闭窗体的时候提示未保存!(windows记事本那样的效果)

解决方案 »

  1.   

    private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)  
    {
     if (e.CloseReason == CloseReason.UserClosing)
      {
      if (DialogResult.Yes == MessageBox.Show("确定要退出本系统吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning))
      {
      Application.Exit();
      }
      else
      e.Cancel = true;
      }}
      

  2.   


    1.定义一个页面级变量bool isSaved记录窗体控件值是否保存.
    2.在窗体关闭时事件中写如下代码.
    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (isSaved == false)
        {
            DialogResult dlgRe = MessageBox.Show("文件未保存,是否保存?", "保存提示", MessageBoxButtons.YesNoCancel);
            if (dlgRe == DialogResult.Yes)
            {
                //调用保存代码.执行完后继续自动关闭.
            }
            else if (dlgRe == DialogResult.Cancel)
            {
                e.Cancel = true;    //取消关闭
            }
            else //dlgRe == DialogResult.No
            {
                //无需写代码,自动关闭.
            }
        }

      

  3.   

    void Form1_Closing用它好点。
      

  4.   

    怎么判断DataGridView 内容是否改变了?
      

  5.   

    CellEndEdit 事件   DataGridView 自带的事件  属性窗口双击 然后写代码按照你的要求  设置一个  bool isEdit = false;
    在 CellEndEdit 事件里  放一句代码 isEdit = true;
    或者判断 修改前的值  与现在的值 是否相等  相等则什么都不做  不等就  isEdit = true;
    这个具体要看你自己设置
    最后就是  close 的时候判断下  isEdit 问他保存不,,,当然 保存的时候你要设置下  isEdit = false;要不然 人家明明保存了你还问人家保存不
      

  6.   

    sample I wrotepublic class TestForm : Form
    {
        private bool dataChanged = false;
        public DataGridView dgv = new DataGridView();
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);            
            this.Controls.Add(dgv);
            dgv.Show();
            dgv.CellValueChanged += (DataGridViewCellEventHandler)delegate { dataChanged = true; };//修改时记录
            this.FormClosing += new FormClosingEventHandler(TestForm_FormClosing);
        }    void TestForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (e.CloseReason == CloseReason.UserClosing && dataChanged)
            {
                DialogResult res = MessageBox.Show("数据发生改变,是否保存?", "提醒", MessageBoxButtons.YesNoCancel);
                switch (res)
                {
                    case DialogResult.Yes:
                        //保存,允许关闭。
                        break;
                    case DialogResult.No:
                        //不保存,但依然允许关闭。
                        break;
                    case DialogResult.Cancel:
                        //阻止继续关闭窗体
                        e.Cancel = true;
                        break;
                }
            }
        }        
    }
      

  7.   


    DataGridView 的CellValueChanged 事件中
    给isSaved =false
      

  8.   

    定义一个全局变量 bool型 
    bool change=False;
     private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
            {
                   change=True;
            }再窗体关闭事件里判断change 并保存
      

  9.   

    DataGridView。里面记住是否该表状态