private void dgvPickStock_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
   DataGridViewRow dgr = dgvPickStock.Rows[e.RowIndex];
   if (dgr.Cells["NewValue"].Value == 1)
   {
   dgr.Cells["NewValue"].Value = "正常";
   } 
}dgr.Cells["NewValue"].Value这个单元格的值是int型的,我如上代码这样写然后运行就报错 Int转换成 String 失败 ,
请问要怎样才能这样转换显示?
我有一个好方法,是在SQL语句上做文章,用case when NewValue=1 then '正常'  这样的方法可以实现,可是不行,
这样的话我更新了又会报错,请大家给个其它可以实现的方法,谢谢!

解决方案 »

  1.   

    dgr.Cells["NewValue"].Value == "1"试试
      

  2.   

    DataGridView內部數據類型校驗的問題,你看可不可以復寫它默認的校驗事件來屏蔽檢測
      

  3.   

    dgr.Cells["NewValue"].Value == "1" //这样无效
    {
       dgr.Cells["NewValue"].Value = "正常";

    dgr.Cells["NewValue"].Value.ToString() == "1" //这样就报错:不是Int32的有效值
    {
       dgr.Cells["NewValue"].Value = "正常";
      

  4.   

    有可能你的列名没有设置。。.cells[列号/列名].value的值是object的。你也可以用索引号来访问一下试试吧,如果能正确,则说你的列名没有给。
      

  5.   

    if (dgr.Cells[13].Value.ToString() == "1") //这样还是报错:不是Int32的有效值
    {
       dgr.Cells[13].Value = "正常";
      

  6.   

    觉得是你的事件用错了为什么要用RowPrePaint这个呢。他在绘制 DataGridViewRow 之前发生。只是提示,,看能帮你不。
      

  7.   

    如果你执意要在grid里改也是可以。不过我觉得SQL里作这样一个处理 会方便很多 case when 字段='1' then '正常' ELSE '不正常' END 
      

  8.   

    首先你这种处理的思想就不对,因为你是int列,DataGridView本身校验就不会让你通过,你为什么不尝试用复选框列来实现呢?列名为“正常否”
      

  9.   

    用combobox 映射 绑定 
      

  10.   

    把数据库改一下,字段类型改为string