0

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

输入是双精度的。

我想要做的是以下内容:

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

有没有办法在运行时做到这一点而不必检查列的每个值?

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

4

2 回答 2

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),这应该会更有效。

于 2013-05-06T14:54:20.010 回答
1

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

或者您可以为此列使用自定义格式功能:

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

PS 有关格式化单元格值的更多详细信息,请参阅格式化单元格值帮助文章。

于 2013-05-06T15:09:11.127 回答