DataGridView的CellValidating事件如何能改变验证单元格的值?

时间:2022-11-11 10:31:38
在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);
                               }

6 个解决方案

#1


因为你的这个事件是当这个单元格不为焦点的时候才会触发……

#2


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

#3


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;  
  }  
  }  
  }  

#4


楼上的没有明白我的意思,那些验证啥的我都已经做好了,只是想改变下单元格的值。情况是必须再次点到那个单元格再失去焦点才能改变。我想这样做,验证完后如果单元格的值通过验证,我再改变下它的值,请问该怎么做?

#5


唉,竟然没有高手来回答,悲哀啊!自己解决了问题,必须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);
  }
算了,结贴吧!

#6


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

#1


因为你的这个事件是当这个单元格不为焦点的时候才会触发……

#2


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

#3


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;  
  }  
  }  
  }  

#4


楼上的没有明白我的意思,那些验证啥的我都已经做好了,只是想改变下单元格的值。情况是必须再次点到那个单元格再失去焦点才能改变。我想这样做,验证完后如果单元格的值通过验证,我再改变下它的值,请问该怎么做?

#5


唉,竟然没有高手来回答,悲哀啊!自己解决了问题,必须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);
  }
算了,结贴吧!

#6


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