清除 LMDGrid 的最佳实践

问题描述 投票:0回答:0

我正在使用 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 列并产生相应的错误,然后是公司列,直到没有创建任何列。

delphi grid
© www.soinside.com 2019 - 2024. All rights reserved.