Devexpress双条件FormatString

时间:2013-05-06 12:42:41

标签: grid format devexpress conditional

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

输入是双倍的。

我想做的是以下内容:

if (cellValue % 1 == 0)
    aColumn.DisplayFormat.FormatString = "N0";
else
    aColumn.DisplayFormat.FormatString = "N2";

有没有办法在运行时执行此操作而无需检查列的每个值?

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

2 个答案:

答案 0 :(得分:1)

据我所知,不,没有。

实际上,你所写的内容会改变整个列的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),这应该更有效。

答案 1 :(得分:1)

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

或者您可以对此列使用Custom Formatting功能:

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

P.S。有关格式化单元格值的更多详细信息,请参阅Formatting Cell Values帮助文章。