delphi 清除LMDGrid的最佳做法

1szpjjfi  于 2023-04-29  发布在  其他
关注(0)|答案(1)|浏览(146)

我正在使用一个LMDGrid,并希望找到最好的方法来清除它,然后重新填充它。我可以一次删除一行,但这需要很长时间。此外,我已经尝试做- LMDGrid。清除列,然后重新创建列。这只在我没有选择行的情况下有效,一旦选择了行,我就会收到一个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列并产生相应的错误,然后是company列,直到没有创建任何列。
更新。当循环并删除反向或正向的行时,我忘记添加开始update和end update(facepalm)。这大大提高了性能。仍然试图弄清楚列的问题,因为在这个项目中,使用一个网格用于多种用途会很好。

bogh5gae

bogh5gae1#

我收到了LMD对我的问题的回复。答案如下。列问题是:MyGrid.Columns[MyColumnIndex].Free;
一个更快的清除网格的方法是:MyGrid.DataRowCount := 0;

相关问题