C# 单元格值的条件格式

C# 单元格值的条件格式,c#,gridview,formatting,conditional,C#,Gridview,Formatting,Conditional,我一直在各地研究GridView的条件格式,但我是ASP.Net新手,日子不好过。这是我发现的最有意义的代码: protected void GridviewRowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { int CellValue = Convert.ToInt32(e.Row.Cells[2].Tex

我一直在各地研究GridView的条件格式,但我是ASP.Net新手,日子不好过。这是我发现的最有意义的代码:

protected void GridviewRowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        int CellValue = Convert.ToInt32(e.Row.Cells[2].Text);
        if (CellValue >= 0)
        {
            e.Row.Cells[2].BackColor = System.Drawing.Color.Green;
        }
        if (CellValue < 0)
        {
            e.Row.Cells[2].BackColor = System.Drawing.Color.Red;
        }
    }
}
受保护的void GridviewRowDataBound(对象发送方,GridViewRowEventArgs e)
{
如果(e.Row.RowType==DataControlRowType.DataRow)
{
int CellValue=Convert.ToInt32(e.Row.Cells[2].Text);
如果(单元格值>=0)
{
e、 Row.Cells[2]。BackColor=System.Drawing.Color.Green;
}
如果(单元格值<0)
{
e、 Row.Cells[2]。BackColor=System.Drawing.Color.Red;
}
}
}

GridView非常简单:一个标题行和三列,标题下有一行,每列有货币金额。我只需要第二行、第三列的数据单元格为绿色,如果>=0,则为绿色,如果则为红色。我将使用int.TryParse而不是Convert.ToInt32,并验证您的文本实际上是数字。如果它看起来是正确的,一个可能的候选者是文本包含空格

因为负数的格式是这样的($1000.00)。检查字符串中是否存在括号,可以根据括号设置颜色格式

if (e.Row.Cells[2].Text.Contains(")")) {
  e.Row.Cells[2].BackColor = System.Drawing.Color.Red;
} else {
  e.Row.Cells[2].BackColor = System.Drawing.Color.Green;
}
或者更好

e.Row.Cells[2].BackColor = e.Row.Cells[2].Text.Contains(")") ? System.Drawing.Color.Red : System.Drawing.Color.Green;

您的值中有无效字符。去掉它们,你就可以走了

int CellValue = Convert.ToInt32(e.Row.Cells[2].Text.Replace("$","").Replace(",","").Replace(".",""));
也许有更好的办法,但现在就试试吧

编辑:更新上面的更改或使用double.Parse()

编辑:

如果你用枪就更好了

bool CellValue = e.Row.Cells[2].Text.IndexOf('(') > -1;

尝试将
int CellValue=
行替换为下面的一行

int CellValue = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "Difference"));
参考:



这看起来确实正确,发生了什么,它不起作用了?e.Row.Cells[2].Text的值是多少?它是空的吗?行单元格[2]是否存在?它是空的吗?由于这是您遇到问题的那一行,请分解该行。使用Convert.ToInt32()时,如果值为null,则返回零。您是否可以为引发的异常提供消息。它提供错误格式exception未经用户代码处理。输入字符串的格式不正确。这是有价值的。这是同一GridView的第1列和第2列之间的差异识别文本的一种简单方法是在该行设置断点,并在“监视调试”窗口中检查e.Row.Cells[2].text的值。只有当值不正确时,他有一个默认操作时,这才有帮助。就你的评论而言,希望他能完成并回复我们。当代码中断时,“监视调试”窗口的值为0。值应为$-92,316@Jake其他的细胞呢?它们的值是否正确?@Jake什么值为0,是CellValue还是e.Row.Cells[2]。Text?当然,CellValue将有0,因为这是int的默认值,并且在该行执行后,您需要检查该值。你真的想看看r.Row.Cells[2]是什么,Text是什么,而不是CellValue。不幸的是,我还是在那一行上遇到了同样的错误。@Jake更新了我的答案。它不喜欢这个时期。也可以将其删除,或者如果您想将其保留在中,则使用double.Parse()。这很好,但取决于需要对该值执行的其他操作,这可能是过度杀戮。如果需要对该值执行其他操作,那么我会这样做。我用上面的bool替换了原来的int CellValue行,但是If语句不起作用,因为条件(>=0)不适用于bool,所以它说…@Jake,您只需要检查true或false,就不再存在>=了。如果有(那么它是负数,如果没有,那么它不是。0不是负数。Priyank,如果你还在,你能快速回答原始帖子的第二部分吗(现在我已经编辑了它)关于导出到Excel?我肯定会绑定数据冲突,但如果你知道一个快速修复方法,我会很感激。或者任何人都会这样做?@Jake,为什么你需要在导出函数中重新绑定它?这里有任何可能帮到@Priyank的例子,它就像删除第二个数据绑定一样简单。谢谢你让我这么做。谢谢你的帮助lp今天。@Priyank,我撒了谎。这实际上并没有解决它。它似乎曾经工作过,但现在不起作用。@Priyank,我通读了您发布的资源,但这似乎是指导出一个gridview,但我必须将4个不同的gridview导出到一个Excel工作表中。我知道该功能如上面所述,但不知何故存在冲突是在我处理所有这些条件格式业务时创建的
int CellValue = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "Difference"));