当前位置:主页>销售管理软件> 列表

ListView控件的数据加载问题,谢谢!!!(100分) 找人事档案管理软件

库存管理软件版1楼: 我需要在同一ListView控件中,在不同时间加载不同的数据,数据量不是很大,但在重新加载另一数据集时(标题栏和数据行都得清除后重新加载),ListView控件出现闪动现现象,请问各位高人,如何解决?谢谢!!!

2楼: 先DisableConstonls,更新完成再EnableControls也许可以 如人事档案管理软件

3楼: listview.item.add('''','''','''')
....

4楼: unit Unit2;

interface

uses
Classes,SysUtils,Contnrs,Dialogs, QDialogs;
//---------------------------------------------------------
type
TRecord = class(TObject)
private
public
nParentID: string;
nPID: string;
strName: string;
strpA: string;
strpB: string;
procedure Assign(objParam: TRecord);
function clone: TRecord;
end;
//-----------------------------------------------------------
TRecordManager = class(TObject)
private
FobjList: TObjectList;
procedure SetobjList(const Value: TObjectList);


protected
function splitString(s: string): TRecord;
public
constructor Create;
destructor Destroy; override;
procedure getField(lst: TStringList);
property objList: TObjectList read FobjList write SetobjList;
end;
//-----------------------------------------------------------
implementation
//-----------------------------------------------------------

procedure TRecord.Assign(objParam: TRecord);
begin
if not Assigned(ObjParam) or not (ObjParam is TRecord) then
Exit;
self.nPID := objParam.nPID;
self.strName := objParam.strName;
self.nParentID := objParam.nParentID;
self.strpA := objParam.strpA;
self.strpB := objParam.strpB;
end;
//-----------------------------------------------------------

function TRecord.clone: TRecord;
begin
Result := TRecord.Create;
Result.Assign(self);
end;
//--------------------------------------------------------------
constructor TRecordManager.Create;

begin
self.objList:=TObjectList.Create;
//inherited;
end;
//--------------------------------------------------------------
destructor TRecordManager.Destroy;
begin
self.objList.Free;
//inherited;
end;

//------------------------------------------------------------

procedure TRecordManager.getField(lst: TStringList);
var
i:integer;
begin
if lst.Count>1 then
begin
for i:=1 to lst.Count-1 do
begin
self.objList.Add(self.splitString(lst.Strings[i]));
end;
end;
end;
//------------------------------------------------------------
procedure TRecordManager.SetobjList(const Value: TObjectList);
begin
if FobjList <> Value then
begin
FobjList := Value;
end;
end;

//-------------------------------------------------------------

function TRecordManager.splitString(s: string): TRecord;
var
str: Tstrings;
pRecord: TRecord;
begin
pRecord := TRecord.Create;
str := Tstringlist.Create;
str.Delimiter := '' ''; //定义分割字符
str.DelimitedText := s; //要分割的string
if str.Count = 5 then
begin
pRecord.nPID:=trim(str.strings[0]);
pRecord.strName:=trim(str.strings[1]);
pRecord.nParentID:=trim(str.strings[2]);
pRecord.strpA:=trim(str.strings[3]);
pRecord.strpB:=trim(str.strings[4]);
end
else
begin
showmessage(''The type of file is invalid!'');
exit;
end;
Result:=pRecord.clone;
pRecord.Free;
end;
//-------------------------------------------------------------
//-------------------------------------------------------------
end.

5楼: 看看这段代码不知道对你有没有帮助
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Menus, Unit2;

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Edit2: TEdit;
Button2: TButton;


ListView1: TListView;
MainMenu1: TMainMenu;
File1: TMenuItem;
Open1: TMenuItem;
Exit1: TMenuItem;
OpenDialog1: TOpenDialog;
TreeView1: TTreeView;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Open1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Exit1Click(Sender: TObject);
procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ListView1ColumnClick(Sender: TObject; Column: TListColumn);
private
lstString: TStringList;
{ Private declarations }
public
procedure loadListV(lst: TStringList);
procedure loadTree(lstStrings: TStringList);
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var
str: Tstrings;
begin
str := Tstringlist.Create;
str.Delimiter := '' ''; //定义分割字符
str.DelimitedText := '' 对象ID 对象名称 上级对象ID 对象属性A 对象属性B''; //要分割的string
edit1.Text := trim(str.Strings[0]);
edit2.Text := trim(str.Strings[1]);

// edit2.Text:=ListView1.Selected.Caption;


end;

procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;

procedure TForm1.FormCreate(Sender: TObject);
//var
// NewColumn: TListColumn;
// ListItem: TListItem;
begin
self.lstString := TStringList.Create;
end;

procedure TForm1.Open1Click(Sender: TObject);
begin
if self.OpenDialog1.Execute = true then
begin
self.lstString.LoadFromFile(self.OpenDialog1.FileName);
self.loadTree(self.lstString);
self.loadListV(self.lstString);

self.ListView1.Items[0].Selected:=true;

end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
self.lstString.Free;
end;

procedure TForm1.loadTree(lstStrings: TStringList);
var
pRM: TRecordManager;
pR: TRecord;
pNode,parentNode: TTreeNode;
i: integer;
begin
pRM := TRecordManager.Create;
parentNode:=nil;
pRm.getField(lstStrings);
if pRM.objList.Count > 1 then
begin
for i := 1 to pRM.objList.Count - 1 do
begin
pR := TRecord(pRM.objList.Items[i]);
parentNode := self.TreeView1.Items.AddChild(parentNode, pR.strName);
//pNode.Data:=
end;

end;
pRM.Free;
end;

procedure TForm1.Exit1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.loadListV(lst: TStringList);
var
pRM: TRecordManager;
pR: TRecord;
ListItem: TListItem;
NewColumn: TListColumn;
i: integer;
begin
pRM := TRecordManager.Create;
pR := TRecord.Create;
pRm.getField(lst);
if pRM.objList.Count > 1 then
begin
NewColumn := self.ListView1.Columns.Add;

NewColumn.Caption := TRecord(pRM.objList.Items[0]).strName;
NewColumn := self.ListView1.Columns.Add;
NewColumn.Caption := TRecord(pRM.objList.Items[0]).strpA;
NewColumn := self.ListView1.Columns.Add;
NewColumn.Caption := TRecord(pRM.objList.Items[0]).strpB;
for i := 1 to pRM.objList.Count - 1 do
begin
pR := TRecord(pRM.objList.Items[i]);
ListItem := self.ListView1.Items.Add;
ListItem.Caption := pR.strName;
ListItem.SubItems.Add(pR.strpA);
ListItem.SubItems.Add(pR.strpB);

end;
end;
pRM.Free;
// pR.Free;
end;

procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
pNode:TTreeNode;
pR:TRecord;
i:integer;
strC:string;
begin
//
pNode:=self.TreeView1.Selected;
//pR:=TRecord(pNode.data);
strC:=pNode.Text;
self.TreeView1.Selected.Focused:=true;
for i:=0 to self.ListView1.Items.Count-1 do
begin
if self.ListView1.Items[i].Caption=strC then
begin
if self.TreeView1.Selected.Focused=true then
begin
//self.TreeView1.Selected.Focused:=true;
//self.ListView1.Selected.Focused:=true;
// self.ListView1.Items[i].Checked:=true;
self.ListView1.Items[i].Focused:=true;
end;
end;
end;
end;

procedure TForm1.ListView1ColumnClick(Sender: TObject;
Column: TListColumn);
begin
//
if column.Caption = ''对象名称'' then
begin
self.ListView1.SortType := stText;
end
else if column.Caption=''对象属性A'' then
begin
showmessage(''pA'');
end
else if column.Caption=''对象属性B'' then
begin
showmessage(''pB'');
end;
// ''对象属性A'':
end;

end.

和钢材的时 一起的

6楼: 我用xfz8124
的思路,在加载新的数据时,将 ListView设为不可见,加载完成后,再设为可见,由于数据量不大,再者闪动是由于重新加载标题栏引起的,所以此问题得以解决,谢谢各位了

库存管理软件版7楼: 我是新手,如果给分,还望各位指点,并快来领分 [:)]