自定义格式双

时间:2010-02-22 16:45:08

标签: .net vb.net winforms

DataGridViewDataTable绑定了DataSet

我将DataTable的所有列都设置为System.Double

我希望DataGridView的最后一行显示"PASS""FAIL",具体取决于该列中某些值的条件

我该怎么做?

想法:
lastCell = IIF(condition, Double.PositiveInfinity, Double.NegativeInfinity)
然后,将一些条件格式(Inf -> PASS, -Inf -> FAIL)应用于DataGridView的最后一行。

3 个答案:

答案 0 :(得分:3)

可能可能会创建并使用自定义NumberFormatInfo,将PositiveInfinitySymbolNegativeInfinitySymbol设置为您想要的字符串。

但是我会说在DataGridView.CellFormatting事件处理程序中做这样的事情会更好 - 这使得你更清楚你正在做什么和为什么,并且不会产生不良副作用,例如:如果另一个单元由于除零而恰好具有无限值。

类似下面的空气代码:

void dataGridView1_CellFormatting(object sender, 
    DataGridViewCellFormattingEventArgs e)
{
    if ((e.ColumnIndex == whatever) && (c.RowIndex == whatever))
    {
        // ... comment explaining what you're doing
        if (condition)
        {
            e.Value = "PASS";
        }
        else
        {
           e.Value = "FAIL";
        }
        e.FormattingApplied = true;
    }
}

对于C#代码表示歉意,因为你已经标记了VB.NET这个问题,但是你会在MDSN文档中找到一个用于CellFormatting事件的VB.NET示例。

答案 1 :(得分:0)

为什么不在boolean类型的表中添加一个额外的列?布尔值在这里更合适,因为你有两种状态之一,它要么通过(真),要么不通过(失败)。

您可以添加额外的DataColumn并手动填充值,也可以使用computed DataColumn,然后将列表绑定到DataGridView上具有“PASS”列的列表。

答案 2 :(得分:0)

以这样的方式建立你的条件:它为“通过”或<评估为> = 0 0表示“FAIL”,并在绑定到网格之前应用它(可能在查询本身中)。然后在DefaultCellStyle.Format属性中使用此格式字符串作为网格中的列:

  

{0: “PASS”, “失败”;}