2

だから私は動的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ここで、line 間のパーセンテージを示す新しい行を追加する必要があり2 and 3ます。

私はそれを行うことができましたが、列全体ではなく、それらのセルに対して特に String.format を変更する方法がわかりません。

CellTemplateSelector が頭に浮かびましたが、値などがわからないため、バインディングを再度設定する必要があることを意味する可能性があるため、それが良い考えであるかどうかはわかりませんi。また、バインディングの string.format のみを変更したい。

数値を double として操作しているため (0,5 は 50%、50 は 5000%)、入力もマスクする必要があると思います。String.Format も私のためにそれを行うかどうか、または使用する必要があるかどうかはわかりませんRadMaskedInput

4

1 に答える 1

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();
    }
}
于 2012-09-18T21:42:07.833 に答える