本人想在一个仓库管理系统里用到treeview
在一个窗体里左边放置一个treeview显示物品类别,右边放一个dbgrid显示类别里具体数据.有2个按钮对treeview操作:添加类别,删除类别
5个按钮对dbgrid操作:添加,编辑,保存,取消删除.现在有几个问题1.删除节点:删除时候判断此节点下是否还有节点,有就不能删除
           删除节点时,如果此节点内的数据不为空(在grid内有数据),不能删除2,查询节点数据:鼠标点父节点,grid里显示父节点里多有节点的数据,点子节点就
                显示子节点里的数据

解决方案 »

  1.   

    treeview1.Selected.HasChildren 判断
      

  2.   

    查询treeview1.Selected.Text 对应的数据 query1.recordcount>0 就不能删
      

  3.   

    第二个问题你可以用模糊查询来实现,或者用一个循环
    select * from .... 
    where ....= ...treeview1.Selected.Item[0].Text
    union
    select * from .... 
    where ....= ...treeview1.Selected.Item[1].Text
    union
    ....
    select * from .... 
    where ....= ...treeview1.Selected.Item[n].Text
      

  4.   

    谢谢楼上各位的大大能给个例子不本人学delphi没多久,实在是菜的很
      

  5.   

    删除类别按钮
       if treeview1.Selected.HasChildren then
         showmessage('子类不为空!')
       else
         treeview1.Selected.Delete;
      

  6.   

    删除按钮--先判断子节点在判断数据集
       if treeview1.Selected.HasChildren then
         showmessage('子类不为空!')
       else  begin
         query1.sql.Clear;
         query1.SQL.Add('select count(*) as cc from xxx where ...='''+treeview1.Selected.Text+'''');
         query1.Close;
         query1.Open;
         if  query1.FieldByName('cc').AsInteger>0 then  begin
           showmessage('纪录不为空!');
           exit;
         end;
         treeview1.Selected.Delete ;
       end;
      

  7.   

    查询--->
    procedure TForm1.TreeView1Click(Sender: TObject);
    var i:integer;
    begin
      query1.SQL.Clear;
    for i:=0 to treeview1.Selected.Count do
      begin
        query1.SQL.Add('select * from xxx where ..='''+treeview1.Items.Item[i].Text+'''');
        if i<treeview1.Selected.Count then
        query1.SQL.Add('union');
      end;
        query1.Close;
        query1.Open;
    end;