在CellValidating事件中我已经对所有想做的验证都写上了,最后验证通过了我想设置下单元格的值,比如用户输入的值是1.0356,我想把单元格的值弄成1.04(就是保留2位小数,注意这个我已经实现了),得到1.04这个串,然后赋值
dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = 1.04,为什么不能改变呢?必须再次点到那个单元格再失去焦点才能改变。下边我把代码贴一下:
if(...)
{
//这是验证过程,具体我不再写
}else
                               {
                                   //保留csw个小数,并四舍五入
                                   string x = "0.";
                                   for (int i = 0; i < xsw; i++)
                                   {
                                       x += "0";
                                   }
                                    
                                   dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = Convert.ToDouble(e.FormattedValue.ToString()).ToString(x);
                               }

解决方案 »

  1.   

    那应该怎么实现值的改变呢?(在CellValidating事件触发之后)
      

  2.   

    private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)  
      {  
      double d= 0.0;  
      dataGridView1.Rows[e.RowIndex].ErrorText = string.Empty;  
      if(dataGridView1.Columns[e.ColumnIndex].DataPropertyName == "")  
      {  
      if(!double.TryParse(e.FormattedValue.ToString(),out d) )  
      {  
      dataGridView1.Rows[e.RowIndex].ErrorText = "输入有误!";  
      e.Cancel = true;  
      }  
      }  
      }  
      

  3.   

    唉,竟然没有高手来回答,悲哀啊!自己解决了问题,必须if(...)
    {
    //这是验证过程,具体我不再写
    }else
      {
    e.Cancel = false;//这里必须加,不加的话需要再次聚焦那个单元格然后离开才能改变值
      //保留csw个小数,并四舍五入
      string x = "0.";
      for (int i = 0; i < xsw; i++)
      {
      x += "0";
      }
        
      dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = Convert.ToDouble(e.FormattedValue.ToString()).ToString(x);
      }
    算了,结贴吧!
      

  4.   

    哈哈,又学到了FormattedValue这个属性