Я пытаюсь реализовать механизм копирования с помощью Telerik RadGridView (версия Silverlight), но у меня есть серьезная проблема.
Моя таблица данных связана с коллекцией 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
Значение1 - это имя, содержащееся в List<String> ColumnNames
. Эта часть в порядке. Однако я не получаю данные (которые являются десятичными значениями, например, 0,242524312), но вместо этого я получаю имя класса.
Что я могу сделать, чтобы операция копирования сохранила значения в свойстве bound объекта MyRow вместо имени его класса (я полагаю, он вызывает метод ToString () для всего, что находится внутри)?
(Вопрос также размещен на форуме Telerik ).