2012-08-30 50 views
2

所以我有一个动态的RadGridView。这意味着我以编程方式将Columns添加到控件。基本上是这样的:如何更改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 22 and 3等之间的百分比。

我设法做到了这一点,但我不知道如何设法改变String.format专门为那些单元而不是整列。

CellTemplateSelector浮现在脑海,但我不确定这是一个好主意,因为这可能意味着我必须再次设置绑定,不知道i等的值。另外我只想更改绑定的string.format。

由于我操纵数字为双倍(0,5是50%,50是5000%),我想我也必须屏蔽输入。不确定是否String.Format对我来说也是如此,或者我应该使用RadMaskedInput

+0

您是否要设置处于编辑模式的单元的格式? – Mohit

+0

只是在显示模式下就足以获得赏金,但我也会尝试在编辑中做一个MaskedInput。 –

+0

什么是GridView的DataSource(或者如果没有数据源,你如何填充行)? – McGarnagle

回答

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(); 
    } 
} 
相关问题