我想有条件地更改网格列的FormatString属性。
输入是双倍的。
我想做的是以下内容:
if (cellValue % 1 == 0)
aColumn.DisplayFormat.FormatString = "N0";
else
aColumn.DisplayFormat.FormatString = "N2";
有没有办法在运行时执行此操作而无需检查列的每个值?
任何帮助将不胜感激,谢谢!
答案 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帮助文章。