Я пытаюсь связать таблицу структур с DataGridView. Загрузка и просмотр таблицы работают нормально, но я не могу отредактировать значение и сохранить его обратно в таблицу. Вот что я делаю.
У меня есть «примитивный» тип данных, Real определяется как
public struct MyReal:IMyPrimative
{
public Double m_Real;
//...
public MyReal(String val)
{
m_Real = default(Double);
Init(val);
}
//...
}
Используется в структуре:
public struct MyReal_Record : IMyRecord
{
public MyReal Freq { get; set;}
MyReal_Record(String[] vals)
{
Init(vals);
}
}
И структура используется для определения таблицы, используя общий список привязок
public class MyTable<S> : BindingList<S> where S: struct, IMyRecord
{
public Type typeofS;
public MyTable()
{
typeofS = typeof(S);
// ...
}
Эта таблица используется в качестве источника привязки для сетки динамически.
private void miLoadFile_Click(object sender, EventArgs e)
{
MyModel.Table<Real_Record> RTable = new MyModel.Table<Real_Record>();
//... Table initialized here
//set up grid with virtual mode
dataGridView1.DataSource = RTable;
}
Все это прекрасно работает, и я могу создать RTable, инициализировать его и отобразить в виде сетки. Сетка позволяет редактировать и имеет установленные для CellParsing и CellFormatting события, которые выглядят так:
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.DesiredType != typeof(String))
return;
e.Value = e.Value.ToString();
}
private void dataGridView1_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
{
if (e.DesiredType != typeof(MyReal))
return;
e.Value = new MyReal(e.Value.ToString());
e.ParsingApplied = true;
this.dataGridView1.UpdateCellValue(e.ColumnIndex, e.RowIndex);
}
Когда я редактирую значение в ячейке, я могу изменить текст. При выходе из ячейки запускается CellParsing и вызывается обработчик события. Кажется, все правильно в обработчике CellParsing. e.DesiredType - это MyReal. e.Value - это строка с новым значением. После того, как новый MyReal создан из строки, e.Value устанавливается правильно. RowIndex и ColumnIndex являются правильными. ReadOnly имеет значение false.
Однако, когда я покидаю ячейку, система восстанавливает первоначальное значение в ячейке. Я думал, что UpdateCellValue заменит значение в источнике данных, но мне кажется, что-то не хватает.
Что я пропустил?
Спасибо,
Max