我想有条件地更改网格列的 FormatString 属性。
输入是双精度的。
我想要做的是以下内容:
if (cellValue % 1 == 0)
aColumn.DisplayFormat.FormatString = "N0";
else
aColumn.DisplayFormat.FormatString = "N2";
有没有办法在运行时做到这一点而不必检查列的每个值?
任何帮助将不胜感激,谢谢!
我想有条件地更改网格列的 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 演示的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 有关格式化单元格值的更多详细信息,请参阅格式化单元格值帮助文章。