我正在使用 LMDGrid,想找到清除它然后重新填充它的最佳方法。 我可以一次删除一行,但这需要很长时间。此外,我尝试执行 - LMDGrid.Columns.clear 然后重新创建列。只要我不选择一行,这就有效,一旦选择了一行,我就会收到一个 Unicode 错误。我在想,即使清除列并重新创建它们,我也会导致网格出现其他问题。 有没有办法将网格重置或重新初始化为默认状态,或者删除每一行是最好的方法吗?
如下所述,LMDGrid 是 LMD Innovative 的网格控件。我正在使用非数据感知网格。
清除格子的代码是
LMDGrid.Columns.Clear; //This clears all of the data and deletes the
//column headers in one shot
//Recreates the column(s)
procedure TForm15.Button1Click(Sender: TObject);
var
cn: TLMDGridTextColumn;
begin
cn := TLMDGridTextColumn.Create(Self);
cn.Title.Caption := 'My column';
cn.Width := 150;
LMDGrid1.Columns.Add(cn);
end;
在重新创建表后运行时,它似乎都正确加载了数据。但是,选择一行时,问题就是上述问题开始的地方。
就通过 for 循环一次删除一行时的速度而言, 即使只有 200 条记录(4 秒),速度也非常慢。我正在寻找的是大多数人认为清除网格并重新填充它的最佳实践。
更多发现。 我在清除列后检查了列数,它报告为零。我首先想到它只是清除列下的数据,包括标题信息。我还认为通过重新创建列,我正在复制已经存在但不可见的内容。所以我已经验证了列和行都是0。所以我觉得我需要在插入新列之前重新初始化网格组件,这部分我不知道该怎么做。
这里有更多关于代码的信息。
procedure TContactsForm.GridCreate();
Var
cn1, cn2, cn3, cn4, cn5: TLMDGridTextColumn;
Begin
ContactsGrid.Columns.Clear;
cn1 := TLMDGridTextColumn.Create(Self);
cn1.Title.Caption := 'ID';
cn1.Width := 30;
ContactsGrid.Columns.Add(cn1);
cn2 := TLMDGridTextColumn.Create(Self);
cn2.Title.Caption := 'Company';
cn2.Width := 100;
ContactsGrid.Columns.Add(cn2);
cn3 := TLMDGridTextColumn.Create(Self);
cn3.Title.Caption := 'First Name';
cn3.Width := 85;
ContactsGrid.Columns.Add(cn3);
cn4 := TLMDGridTextColumn.Create(Self);
cn4.Title.Caption := 'Last Name';
cn4.Width := 100;
ContactsGrid.Columns.Add(cn4);
cn5 := TLMDGridTextColumn.Create(Self);
cn5.Title.Caption := 'Phone Number';
cn5.Width := 50;
ContactsGrid.Columns.Add(cn5);
refreshGrid // this repopulates the grid
showmessage('Column Count' + inttostr(ContactsGrid.columns.Count) + 'Row Count' + inttostr(ContactsGrid.DataRowCount))
End;
所以我注意到我可以根据需要多次重新创建列,但是一旦选择了一行并重新创建了列,它就不会创建所有列。选定行上的第一次刷新不会创建 ID 列并产生相应的错误,然后是公司列,直到没有创建任何列。