读书人

VirtualStringTree连接数据库实时刷新

发布时间: 2013-03-01 18:33:02 作者: rapoo

VirtualStringTree连接数据库实时刷新问题
VirtualStringTree连接数据库实时刷新有关问题
VirtualStringTree和DBGird都连接同一数据库表,当点击按钮表的“数量”列的记录发上变化,DBGird的“数量”可以实时刷新,但是怎么能实现VirtualStringTree的“数量”实时刷新?

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, VirtualTrees, StdCtrls, Grids, DBGrids, DB, ADODB;

type
PCustRec = ^TCustRec;
TCustRec = record
id: WideString;
zubie: WideString;
shuliang: WideString;
end;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
VSTree: TVirtualStringTree;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure VSTreeInitNode(Sender: TBaseVirtualTree;
ParentNode, Node: PVirtualNode;
var InitialStates: TVirtualNodeInitStates);
procedure VSTreeGetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
sl: Integer;
begin
sl := ADOQuery1.FieldByName('shuliang').AsInteger;
ADOQuery1.First;
with ADOQuery1 do
begin
Edit;
FieldByName('shuliang').AsInteger := sl + 1;
Post;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
VSTree.BeginUpdate;
VSTree.NodeDataSize := Sizeof(TCustRec);
VSTree.RootNodeCount := ADOQuery1.RecordCount;
VSTree.EndUpdate;
end;

procedure TForm1.VSTreeInitNode(Sender: TBaseVirtualTree;
ParentNode, Node: PVirtualNode;
var InitialStates: TVirtualNodeInitStates);
var
CustomerRecord: PcustRec;
begin
CustomerRecord := Sender.GetNodeData(Node);
Initialize(CustomerRecord^);

CustomerRecord^.id := ADOQuery1.FieldByName('id').AsString;
CustomerRecord^.zubie := ADOQuery1.FieldByName('zubie').AsString;
CustomerRecord^.shuliang := ADOQuery1.FieldByName('shuliang').AsString;
if not ADOQuery1.EOF then ADOQuery1.Next;
end;

procedure TForm1.VSTreeGetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);


var
CustomerRecord: PcustRec;
begin
CustomerRecord := Sender.GetNodeData(Node);
case Column of
0: CellText := CustomerRecord^.id;
1: CellText := CustomerRecord^.zubie;
2: CellText := CustomerRecord^.shuliang;
else CellText := '';
end;

end;

end.


[解决办法]
这个东东我做过,你只要修改DBGRID的数据后,同时查找VirtualStringTree对应的节点
并取到其Node的Data对Data进行修改后就可以了。

[解决办法]
重新加载数据集也可以的。
[解决办法]
重新绑定!思路应该是这样的!

读书人网 >.NET

热点推荐