所以我有一个动态的RadGridView。这意味着我以编程方式向控件添加列。基本上是这样的:
for (int i = 0; i < length; i++)
{
Binding b = new Binding(string.Format("Collection[{0}].ValueIWant", i));
binding.StringFormat = "{0:0.##}";
GridViewDataColumn column = new GridViewDataColumn()
{
Header = HeaderFor(i),
DataMemberBinding = b,
DataType = typeof(double?)
};
Control.columns.Add(column);
}
现在我需要添加新行,以显示行1 and 2
,2 and 3
之间的百分比等。
我已设法做到这一点,但我不知道如何设法更改String.format专门针对那些单元而不是整列。
CellTemplateSelector浮现在脑海中,但我不确定这是个好主意,因为这可能意味着我必须再次设置绑定,而不知道i
等的值。另外,我只想更改绑定上的string.format。
当我将数字操作为双精度数(0,5为50%,50为5000%)时,我想我也必须屏蔽输入。不确定String.Format是否也为我做了这个,或者我是否应该使用RadMaskedInput
答案 0 :(得分:2)
使用IValueConverter
将每行的列值转换为适当的表示形式。因此,对于计算列上的绑定,请使用:
// bind to the row data itself, not any specific property
Binding b = new Binding();
b.Converter = new RowToFormattedValueConverter
这会将完整的行数据发送到转换器;所以你应该能够使用行的一些现有属性来确定它是哪种类型(常规或百分比),或者添加一个额外的隐藏属性/列来明确指定它。转换器看起来像这样:
public class RowToFormattedValueConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var rowData = (MyModelType)value;
string formattedResult;
if (rowData.IsPerecentageRow)
{
formattedResult= string.Format("{0:P1}", rowData.ValueIWant);
}
else
{
formattedResult= string.Format("{0:0.##}", rowData.ValueIWant);
}
return formattedResult;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}