在radgridview上进行条件格式化以删除' - ' - C#

时间:2018-03-01 12:06:57

标签: c# radgridview cell-formatting

我有一个rad网格视图,其中包含与库存移动相关的数据。名为列的值将全部拉为负值。我想添加格式,以便从数字中删除否定。

我认为条件格式是我想要这样做的方式,我不确定在满足条件后我想做什么。

ConditionalFormattingObject obj = new ConditionalFormattingObject("MyCondition", ConditionTypes.StartsWith, "-", "", false);
obj.CellBackColor = Color.SkyBlue;
obj.CellForeColor = Color.Red;
obj.TextAlignment = ContentAlignment.MiddleRight;
this.rgv_orderLines.Columns["Moved so Far"].ConditionalFormattingObjectList.Add(obj);

上述代码会在满足条件时将单元格变为蓝色。但是,我不想要这个,我希望删除'-'

编辑:以下代码给出了所需的结果,但是,如果没有尝试捕获它会在任何不包含值的单元格上崩溃。

    private void rgv_orderLines_CellFormatting(object sender, CellFormattingEventArgs e)
    {
        if (e.CellElement.ColumnInfo.Name == "Moved so Far")
        {
            try
            {
                string value = e.CellElement.Value.ToString();
                value = value.Replace("-", "");
                e.CellElement.Value = value;
            }
            catch (Exception ex)
            {

            }
        }
    }

1 个答案:

答案 0 :(得分:1)

ConditionalFormattingObject仅用于样式行,即设置字体和颜色。它没有格式化数据值的功能。

理想情况下,您应该首先将数据存储为正数,因为这样可以更轻松地进行排序,过滤等操作。但是,如果您只想将值显示为正数,则应确保该列为GridViewDecimalColumn,并将列的FormatString设置为

"#.###;#.###;0"

这意味着显示正数和负数均为3位小数的值,0表示0。

如果它是一个字符串列,你的代码将工作,只需在格式化之前检查Value是否为null:

private void rgv_orderLines_CellFormatting(object sender, CellFormattingEventArgs e)
{
    if (e.CellElement.ColumnInfo.Name == "Moved so Far")
    {
        if(e.CellElement.Value != null)
        {
            string value = e.CellElement.Value.ToString();
            value = value.Replace("-", "");
            e.CellElement.Value = value;
        }
    }
}