我在一个窗口上放了一个PageControl控件,该控件的每个PAGE上都放了一个DBGRID控件,在我点击某DBGRID的相应字段时,打开另一个窗体并在该窗体上显示相应的树形菜单,双击该树形菜单中的某字段,将该字段的值写入DBGRID的相应字段中。但DBGRID和DBGRID中的字段都是不定的,部分代码如下:生成树形菜单:
procedure treecreate1(tabnam1:string);
begin
  form1.ADOQuery3.Close;
  form1.ADOQuery3.SQL.Clear;
  form1.ADOQuery3.SQL.Add('select * from '+tabnam1);
  form1.ADOQuery3.Open;
  form3.TreeView1.Items.Clear ;
  form3.TreeView1.Enabled:=true;
  while not form1.ADOQuery3.eof do
  begin
    form3.TreeView1.Items.Add(form3.TreeView1.TopItem,form1.ADOQuery3.Fields[0].AsString+form1.ADOQuery3.Fields[1].AsString);
    form1.ADOQuery3.Next ;
  end;
 form3.Show;
end;procedure treecreate2(tabnam1,tabnam2:string);
var
  mynode:array[0..2] of ttreenode;
  str:string;
begin
  form1.ADOQuery3.Close;
  form1.ADOQuery3.SQL.Clear;
  form1.ADOQuery3.SQL.Add('select * from '+tabnam1);
  form1.ADOQuery3.Open;
  form3.TreeView1.Items.Clear ;
  form3.Enabled:=true;
  while not form1.ADOQuery3.Eof do
    begin
      mynode[0]:=form3.TreeView1.Items.Add(form3.TreeView1.TopItem,form1.ADOQuery3.Fields[0].AsString+form1.ADOQuery3.Fields[1].AsString);
      mynode[0].ImageIndex:=1;
      str:=form1.ADOQuery3.Fields[0].AsString ;
      form1.ADOQuery4.Close;
      form1.ADOQuery4.SQL.Clear;
      form1.ADOQuery4.SQL.Add('select * from '+tabnam2+' where id like '+''''+str+'%'+'''');
      form1.ADOQuery4.Open ;
      while not form1.ADOQuery4.Eof do
       begin
         form3.TreeView1.Items.AddChild(mynode[0],form1.ADOQuery4.Fields[0].AsString+form1.ADOQuery4.Fields[1].AsString);
         form1.ADOQuery4.Next;
       end;
      form1.ADOQuery3.Next;
   end;
   form3.Show;
end;根据鼠标点击调用该过程:procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
 if form3.Visible =true then form3.Close
 else
 begin
  if dbgrid1.SelectedField=dbgrid1.DataSource.DataSet.FieldByName('单位代码') then
   treecreate1('单位代码');
  if dbgrid1.SelectedField=dbgrid1.DataSource.DataSet.FieldByName('单位地址') then
   treecreate3('中国行政区划分','中国行政区划分代码1','中国行政区划分代码2');
  if dbgrid1.SelectedField=dbgrid1.DataSource.DataSet.FieldByName('隶属关系') then
   treecreate1('单位隶属关系');
  if dbgrid1.SelectedField=dbgrid1.DataSource.DataSet.FieldByName('单位级别') then
   treecreate1('单位级别');
  if dbgrid1.SelectedField=dbgrid1.DataSource.DataSet.FieldByName('单位性质') then
   treecreate1('单位性质');
  if dbgrid1.SelectedField=dbgrid1.DataSource.DataSet.FieldByName('经济类型') then
   treecreate2('经济类型代码','经济类型代码1'); end;
end;procedure TForm1.DBGrid3DblClick(Sender: TObject);
begin
 if form3.Visible=true then form3.Close
 else
  if dbgrid3.SelectedField=dbgrid3.DataSource.DataSet.FieldByName('拨款形式') then
   treecreate1('拨款形式');
end;树形菜单传值:procedure TForm3.TreeView1DblClick(Sender: TObject);
begin
  form1.Edit1.Text:=treeview1.Selected.Text;
  form1.Edit1.Text:=treeview1.Selected.Text;
  form3.Close;
end;我想知道我该在哪里将值传到相应DBGRID的相应字段中。

解决方案 »

  1.   

    没仔细看,在form1.Edit1的OnExit中处理可不可以?
      

  2.   

    Form1:
    OnButtonClick
    begin
      if Form2.ShowModal=mrOK then
      //do your things here
      else
      // do your things here
    end;
      

  3.   

    可以啊,你把第二次打开的窗口设置为showmodal,并申明全局变量,把值传到第一个窗口就可以了,然后等第二窗口关闭后继续执行第一个窗口的事件
      

  4.   

    dxdbgrid 的 dxdbpopupcolumn控件
      

  5.   

    showmodal的用法可否讲解一下,可否给个例子
      

  6.   

    A,在数据库中建立索引表: id=value
    B,建立通用索引类:按名称读入索引表
    C,将所有的索引类登记到TStringList中:  name=field, object=class
    D,点击GRID时查找对应的索引类
    E,建立通用窗口选择索引类子项
    F,用所选子项更新数据库
    G,更新显示yeah! all done