【问题标题】:Conditional formatting on a radgridview to remove '-' - C#radgridview 上的条件格式以删除“-” - C#
【发布时间】:2018-03-01 12:06:56
【问题描述】:

我有一个 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);

当满足条件时,上面的代码会将单元格变为蓝色。但是,我不希望这样,我希望删除 '-'

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

    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)
            {

            }
        }
    }

【问题讨论】:

  • 列的类型是什么?是GridViewDecimalColumn吗?
  • 该列从 SQL 查询中提取数据,我相信数据是作为字符串提取的。
  • 好的,只需检查它周围的if(e.CellElement.Value != null) 而不是try..catch

标签: c# radgridview cell-formatting


【解决方案1】:

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

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

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

这意味着将值显示为小数点后 3 位,正数和负数都显示,0 表示 0。

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

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;
        }
    }
}

【讨论】:

  • 嗨,空值检查是我在尝试捕获之前所做的,但这会导致程序在加载数据后立即崩溃。
  • 我正在改变它的工作方式,并将该列设为小数列
  • rgv_orderLines.Columns["移动这么远"].FormatString = "#.###;#/###;0";
  • 这是因为发现null导致程序崩溃,我只需要添加一个null检查吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-30
  • 2017-03-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多