Здравствуйте, уважаемые форумчане. У меня такая проблема, бьюсь вторые сутки.
Есть таблица, в которой меняется набор колонок в процессе работы программы.
Нужно удалять старые колонки и создавать новые. Создается все нормально,
но когда доходит дело до пересоздания всего набора колонок, то при попытке освободить
память оператором free. выскакивает ошибка типа "Invalid pointer operation".
Испробовал все.
Пробовал удалять непосредственно из компонента, пробовал из массива указателей на колонки.
Пробовал MyGridView.ClearItems;
Пробовал также так:
MyGridView.BeginUpdate;
// далее убиваю старые колонки и создаю новые
MyGridView.EndUpdate;
Эфект не изменился. Поиск по форумам и в интернете облегчения не принес.
Прилагаю код создания колонок и код очистки. Заранее спасибо за помощь.
// *******************************************Создание**********************
KMCol: array of TcxGridDBColumn;// Список колонок, объявлен в классе
// В цикле вставлен этот кусок кода
// создаем колонку с галками
SetLength(KMCol, Length(KMCol)+1 );
i:=Length(KMCol) -1;
KMCol[i]:=MyGridView.CreateColumn;
KMCol[i].PropertiesClassName :='TcxCheckBoxProperties';
KMCol[i].DataBinding.FieldName:=FieldCheckedName;
KMCol[i].Name :=FieldCheckedName;
TcxCheckBoxProperties(KMCol[i].Properties).OnChange := Nil;
TcxCheckBoxProperties(KMCol[i].Properties).NullStyle := nssInactive;
// Названия и значения
SetLength(KMCol, Length(KMCol)+1 );
i:=Length(KMCol) -1;
KMCol[i]:=MyGridView.CreateColumn;
KMCol[i].PropertiesClassName :='TcxLabelProperties';
KMCol[i].DataBinding.FieldName:=FieldName;
KMCol[i].Name :=FieldName;
TcxCheckBoxProperties(KMCol[i].Properties).OnChange := Nil;
TcxCheckBoxProperties(KMCol[i].Properties).NullStyle := nssInactive;
TcxLabelProperties(KMCol[i].Properties).ReadOnly:= true;
//типы точки
SetLength(KMCol, Length(KMCol)+1 );
i:=Length(KMCol) -1;
KMCol[i]:=MyGridView.CreateColumn;
KMCol[i].PropertiesClassName :='TcxLabelProperties';
KMCol[i].DataBinding.FieldName:=fieldStatusName;
KMCol[i].Name :=fieldStatusName;
TcxCheckBoxProperties(KMCol[i].Properties).OnChange := Nil;
TcxCheckBoxProperties(KMCol[i].Properties).NullStyle := nssInactive;
TcxLabelProperties(KMCol[i].Properties).ReadOnly:= true;
И проблемный код.
// *******************************************удаление**********************
for i :=0 to length(KMCol) -1 do
begin
KMCol[i].Free; //вылет с ошибкой
end;
SetLength(KMCol ,0);
{ // тоже не помогло
MyGridView.BeginUpdate;
for i :=0 to MyGridView.ColumnCount -1 do
begin
MyGridView.Columns[i].Free;
end;
MyGridView.EndUpdate;
}
Заранее благодарю.