首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

VirtualStringTree连接数据库实时刷新有关问题

2013-03-01 
VirtualStringTree连接数据库实时刷新问题VirtualStringTree和DBGird都连接同一数据库表,当点击按钮表的“

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进行修改后就可以了。

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

热点排行