起步软件技术论坛-X3

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: lity

to :zfang

[复制链接]
发表于 2008-11-12 16:22:40 | 显示全部楼层
好,那假如手套是最末节点,那点手套的时候怎么过滤这个数据?
其实这个问题并不复杂,需要你动态的去根据datatreelist中点击的节点信息过滤datagrid中的数据(要用两个数据集)。
你看我做的一个简单的测试(不一定符合你的逻辑):

4.gif

120.51 KB, 下载次数: 87

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-12 16:34:27 | 显示全部楼层
手套是类别,他的内容是棉手套、皮手套等。
我们设计的只在没有叶子的结点下面填写内容。如果点手套了,那么右边表格显示如下:
type   sumnum  sumvalue
钢筋  100     10000
水泥  100     10000
棉手套  10    200
皮手套  90     800
帽子  100      10000
回复 支持 反对

使用道具 举报

发表于 2008-11-12 17:20:26 | 显示全部楼层
不太懂,建议楼主添加数据做一个录入界面吧,不要直接操作datagrid可能会变简单多了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-13 08:32:27 | 显示全部楼层
to:zfang
1、能把你上面代码给俺学习学习吗?
2、有个问题想问问:点击树在右侧显示,应该写在哪个事件里合适呢?
谢谢先
回复 支持 反对

使用道具 举报

发表于 2008-11-13 08:47:08 | 显示全部楼层
1、很简单,就是用sql语句去拼这样的记录集(用uinon,具体条件就由你自己的逻辑来定)
2、DataTreeList的OnClick事件就可以。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-13 09:13:36 | 显示全部楼层
下面是我写的点父结点出来的所有2级的,问题是:我怎么判断点3级结点的?4级的,未知级的?我现在不会给写在一起,就会一个一个写,这样不行啊

procedure TPrintOut.DataTreeList1Click(Sender: TObject);
var
  FilterStr,lStuffType: string;
begin
  if not Dsb_data.DataSet.Active then
    Dsb_Data.DataSet.Open;
  if Dsb_Data.DataSet.FieldByName('pid').IsNull then    //树的父结点
  begin
    Dsb_Data.DataSet.First;
    while not Dsb_Data.DataSet.Eof do
    begin
      lStuffType := Business.System.StringUtils.Copy(Dsb_Data.DataSet.FieldByName('StuffType').AsString,1,9); //2级结点
      FilterStr := 'SubstanceType=''%s''';
      TSQLDataSet(DSB_Detail.Dataset).SQLFilter := SysUtils.Format(FilterStr,[lStuffType]);
      TSQLDataSet(DSB_Detail.DataSet).SQLFiltered := True;
      TSQLDataSet(DSB_Detail.DataSet).Open;
      if not ZDYSJJ.DataSet.Active then     //自定义数据集
        ZDYSJJ.DataSet.Open;
      with ZDYSJJ.DataSet do
      begin
        if not Locate('YHZD1',Dsb_Detail.DataSet.FieldByName('SERIALNUM').AsString,[]) then
        begin
          Append;
          FieldByName('YHZD1').AsString :=
                          Dsb_Detail.DataSet.FieldByName('SERIALNUM').AsString;
          FieldByName('YHZD2').AsString :=
                          Dsb_Detail.DataSet.FieldByName('SubstanceType').AsString;
          FieldByName('YHZD3').AsString :=
                          Dsb_Detail.DataSet.FieldByName('TotalNum').AsString;
          FieldByName('YHZD4').AsString :=
                          Dsb_Detail.DataSet.FieldByName('TotalMoney').AsString;

          Post;
        end;
      end;
      Dsb_Data.DataSet.Next;
    end;
  end;
  if ZDYSJJ.DataSet.UpdatesPending then
    ZDYSJJ.DataSet.ApplyUpdates;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-13 09:14:32 | 显示全部楼层
请指点一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-13 11:24:52 | 显示全部楼层

to :zfang

点“其他类”的时候看你做的是对的,符合我们要求,能指点一下是怎么做的吗???左边的树拼出来了。
请指点,谢谢
回复 支持 反对

使用道具 举报

发表于 2008-11-13 11:42:46 | 显示全部楼层
procedure TDCSJZXBDWD.DataTreeList1Click(Sender: TObject);
var
  lid,lfid : String;
begin
  //
  lid := DataSetBroker1.DataSet.FieldByName('id').AsString;
  lfid := DataSetBroker1.DataSet.FieldByName('fid').AsString;

  TSQLDataSet(DataSetBroker2.DataSet).Close;
  TSQLDataSet(DataSetBroker2.DataSet).SQL.Text := ' select * from CSSJJD '
           + ' where fid = '''+lid+''' Union '
           + ' select * from CSSJJD where fid = '''+lfid+''' '
           + ' and (id <> '''+lid+''') ';
  TSQLDataSet(DataSetBroker2.DataSet).Open;
end;
这个就是我简单测试的代码,其中id是关键字,fid是父id
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-27 06:12 , Processed in 0.068610 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表