Telerik の RadGridView (Silverlight バージョン) でコピー メカニズムを実装しようとしていますが、深刻な問題があります。私の Datagrid は ObservableCollection にバインドされています。MyRow クラスは次のとおりです。
public class MyRow
{
public List<string> ColumnNames { get; set; }
public List<decimal?> Values { get; set; }
public String TimeStamp { get; set; }
public MyRow()
{
ColumnNames = new List<string>();
Values = new List<decimal?>();
}
}
ご覧のとおり、列は動的に作成されます。これは、MyRow
オブジェクトが任意の数の値を保持できるためです (そのため、列の数を作成する必要があります)。列は入力ごとString
に生成さColumnNames
れ、パラメーター化された を使用して値がバインドされますValueConverter
。
private void createColumns(ObservableCollection<MyRow> values)
{
while (dataGrid.Columns.Count > 1)
dataGrid.Columns.RemoveAt(1);
dataGrid.Columns[0].Header = CommonStrings.TimeStamp;
int columnCount = values.First().ColumnNames.Count;
for (int i = 0; i < columnCount; i++)
{
GridViewDataColumn col = new GridViewDataColumn();
col.Header = values.First().ColumnNames[i];
col.DataType = typeof(MyRow);
Binding bnd = new Binding();
bnd.Converter = new MyRowCollectionConverter();
bnd.ConverterParameter = i;
col.DataMemberBinding = bnd;
dataGrid.Columns.Add(col);
}
}
ただし、コピー (CTRL + C) しようとすると、次のようになります。
TimeStamp Value1
12.12.2011. 9:51:59 MyProject.MyRow
12.12.2011. 9:52:59 MyProject.MyRow
12.12.2011. 9:53:59 MyProject.MyRow
12.12.2011. 9:54:59 MyProject.MyRow
Value1 は、に含まれる名前List<String> ColumnNames
です。その部分は大丈夫です。ただし、データ (0.242524312 などの 10 進数値) は取得しませんが、代わりにクラス名を取得します。
コピー操作で、クラス名ではなく MyRow オブジェクトのバインドされたプロパティの値を保持するにはどうすればよいですか (内部にあるもので ToString() メソッドを呼び出すと思います)。
(質問はTelerikのフォーラムにも投稿されました)。