Grid Devexpress双条件格式字符串

Grid Devexpress双条件格式字符串,grid,format,devexpress,conditional,Grid,Format,Devexpress,Conditional,我想有条件地更改网格列的FormatString属性 输入是双精度的 我想做的是: if (cellValue % 1 == 0) aColumn.DisplayFormat.FormatString = "N0"; else aColumn.DisplayFormat.FormatString = "N2"; 有没有一种方法可以在运行时执行此操作而不必检查列的每个值 任何帮助都将不胜感激,谢谢 据我所知,没有 实际上,您编写的内容将更改整个列的FormatString,而不是

我想有条件地更改网格列的FormatString属性

输入是双精度的

我想做的是:

if (cellValue % 1 == 0)
    aColumn.DisplayFormat.FormatString = "N0";
else
    aColumn.DisplayFormat.FormatString = "N2";
有没有一种方法可以在运行时执行此操作而不必检查列的每个值


任何帮助都将不胜感激,谢谢

据我所知,没有

实际上,您编写的内容将更改整个列的FormatString,而不是单个单元格,这不是您想要的

我认为您应该做的是处理GridView的
CustomColumnDisplayText
事件。您的处理程序看起来像:

void gridView1_CustomColumnDisplayText(object sender, CustomColumnDisplayTextEventArgs e)
{
    if (e.Column.FieldName == "YourFieldName")
    {
        float value = Convert.ToDouble(e.Value);
        if (value % 1 == 0)
            e.DisplayText = string.Format("{0:N0}", value);
        else
            e.DisplayText = string.Format("{0:N2}", value);
    }
{

请注意,如果您为GridView定义了自己的列,则可以将事件处理程序中的第一个条件表达式更改为if(e.Column==myColumn),这应该更有效。

您可以使用@kenrogers演示的处理事件的方法

或者,您可以将此功能用于此列:

aColumn.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Custom;
aColumn.DisplayFormat.Format = new CustomDoubleFormatter();

public class CustomDoubleFormatter : IFormatProvider, ICustomFormatter {
    public object GetFormat(Type format) {
        return this;
    }
    public string Format(string format, object arg, IFormatProvider provider) {
        bool hasFractionalPart = ((double)arg % 1.0 > double.Epsilon);
        return string.Format(hasFractionalPart ? "{0:N2}" : "{0:N0}", arg);
    }
}

备注:有关设置单元格值格式的更多详细信息,请参阅帮助文章。

非常有效,谢谢。我更喜欢这种方法,而不是在“显示时间”检查值。它肯定更快更稳定。再次感谢你,迪米特里!感谢您的回复@kenrogers。但我更喜欢Dimitry提出的方法,它在运行时似乎更快。谢谢