2

我试图DataGridView在我的 C# windows 应用程序中更改 a 中的一些列值,但是当我尝试分配新值时,我得到一个弹出错误窗口,上面写着:

DataGridView 默认错误对话框

DataGridView 中发生以下异常:...

这是显示此弹出窗口的屏幕截图,即使在 try 块中也会显示! 在此处输入图像描述
这就是我的做法,首先填充gridview,然后我尝试更改一些列值,它们是数字,以显示一千个分隔的数值。例如,我得到 780,000 而不是 780,000 !

private static string Test(string number)
{
  try
   {
     gridview.DataSource = DBAPI.ExecuteSqlFunction(function, new string[] { CurrentSourceID });
    //format price
    foreach (DataGridViewRow row in gridview.Rows)
    {
       row.Cells[2].Value = GetFormattedNumber(row.Cells[2].Value.ToString().Replace(",",""));
    }
   }
   catch (Exception ex)
    {
        SaveAndShowLog(ex);
    }
}
    public static string GetFormattedNumber(string number)
    {
       try
        {
            return string.Format("{0:N0}", Int64.Parse(number));
        }
        catch (Exception ex)
        {
            SaveAndShowLog(ex);
            return  number;
        }
    }
4

1 回答 1

1

要隐藏错误消息,您需要处理该DataGridView.DataError事件。请参阅链接中的示例。

您可以使用该DataGridViewCellFormatting事件来格式化该值,并且不要尝试直接用字符串值替换该值,因为它无论如何都会引发错误。

private static string Test(string number)
{
    try 
    {
        gridview.DataSource = DBAPI.ExecuteSqlFunction(function, new string[] { CurrentSourceID });
        gridview.CellFormatting += gridView_CellFormatting;
    } 
    catch (Exception ex) 
    {
        SaveAndShowLog(ex);
    }
}

public static string GetFormattedNumber(string number)
{
    try
    {
        return string.Format("{0:N0}", Int64.Parse(number));
    } 
    catch (Exception ex) 
    {
        SaveAndShowLog(ex);
        return number;
    }
}

private static void gridView_CellFormatting(object sender, System.Windows.Forms.DataGridViewCellFormattingEventArgs e)
{
    if (e.ColumnIndex == 2)
    {
        object val = gridview.Rows[e.RowIndex].Cells[2].Value;
        if ((val != null) && !object.ReferenceEquals(val, DBNull.Value))
        {
            e.Value = GetFormattedNumber(val.ToString().Replace(",", ""));
            e.FormattingApplied = true;
        }

    }
}
于 2013-09-20T11:54:24.793 回答