对DataGrid增加一条记录,其中所有的列都不能为空, 不为空的限制是在dataGridView1_CellValidating事件里面实现的。现在想在点 "新增" 按钮后, 取消对该 DataGrid 的操作, 请问 怎样才能实现?现在的问题是 只要焦点一离开 当前的cell, 就会提示"不能为空"的信息。 该怎样屏蔽这个信息,取消当前的状态?相关代码如下:
        private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            // Don't allow empty
            if (String.IsNullOrEmpty(e.FormattedValue.ToString().Trim())) 
            {
                MessageBox.Show("Please input a value.","Information");
                e.Cancel = true;
                return;
            }            if (dataGridView1.Columns[e.ColumnIndex].Name.Equals("StartingVolume", StringComparison.OrdinalIgnoreCase) ||
                dataGridView1.Columns[e.ColumnIndex].Name.Equals("CurrentVolume", StringComparison.OrdinalIgnoreCase)) 
            {
                // Allow only numeric
                bool bNumeric = true;
                bNumeric = ApplicationProperties.IsNumericString(e.FormattedValue.ToString());                if (!bNumeric) 
                {
                    string strMess = string.Format("{0} must be a numeric value", dataGridView1.Columns[e.ColumnIndex].Name);
                    MessageBox.Show(strMess,"Error");
                    e.Cancel = true;
                    return;
                }
            }            // Validating Catalog
            if (dataGridView1.Columns[e.ColumnIndex].Name.Equals("Catalog", StringComparison.OrdinalIgnoreCase)) 
            {
                int i = 0;
                foreach (Reagent reagent in DataLists.Reagents) 
                {
                    if (reagent.Catalog.Equals(e.FormattedValue.ToString().Trim(), StringComparison.OrdinalIgnoreCase))
                        i++;
                }
                if (i == 0) 
                {
                    MessageBox.Show("Input Catalog don't exist.","Error");
                    e.Cancel = true;
                    return;
                }
            }
        }
        private void imageButtonClose_Click(object sender, EventArgs e)
        {
            if (isAddingReagent) 
            {
                isAddingReagent = false;
                dataGridView1.EndEdit();
            }
            else
                this.Close();
        }

解决方案 »

  1.   

    不要看代码啊
    很简单的 ,代码都是验证 cell不能为空  或者其他的啊
    主要怎样实现取消的功能, 代码仅作参考 : 
    重要的代码是:
                    e.Cancel = true; 
                    return; isAddingReagent = false; 
                    dataGridView1.EndEdit(); 
      

  2.   

    为什么要在dataGridView1_CellValidating事件验证?
    在保存事件验证
      

  3.   

       private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
            { 
                // Don't allow empty 
                if (String.IsNullOrEmpty(e.FormattedValue.ToString().Trim())) 将这行的红色部分去掉试试
                { 
                    MessageBox.Show("Please input a value.","Information"); 
                    e.Cancel = true; 
                    return; 
                } 
      

  4.   

    取消 按钮的脚本 一般怎样写?
    比如操作一个 grid, 操作一半了, 想取消刚才的操作, 那么 这个 “取消”按钮的脚本该怎样写呢?
      

  5.   


    去掉的话,那cell就允许为空了,现在就是不能为空
      

  6.   

    先定义一个全局静态变量 bool isCellValidating=true
    或者全局变量也行
    增加行的同时isCellValidating=false
    在if (String.IsNullOrEmpty(e.FormattedValue.ToString().Trim())) 将这行的红色部分去掉试试 
    之前先判断isCellValidating就行了
      

  7.   


    没看明白...
    if (String.IsNullOrEmpty(e.FormattedValue.ToString().Trim()))
    如果去掉了,那么 非空的判断在哪里实现呢?
      

  8.   

    ...11L的意思是在if (String.IsNullOrEmpty(e.FormattedValue.ToString().Trim())) 之前先判断isCellValidating
      

  9.   

    焦点切换就出触发CellValidating事件,而一般焦点切换,默认是认为你已经添加完数据了。
    那么是不是可以考虑换一种思路来实现:
    CellValidating事件触发验证不通过时,提示用户,并询问是否要取消当前记录的添加?