2012-08-30 90 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(); 
    } 
} 
相關問題