除了红色外解决的地方已有大侠给出,地址:http://bbs.csdn.net/topics/390519799?page=1#post-395058726请高手提供整个代码解决方案,甚谢!!!!!!!!!!!!

解决方案 »

  1.   

    我看你前两天也发过类似的帖子。
    不知我是不是完全理解了你意思,我的建议如下:
    我的工资单上有40-50项,但对我真正有用的不超过20项,其它的也会显示,只不过数据是0。
    一个城市有好多部门,除了基本工资、住房公积金、医疗补助(医保卡)等少数几项是一样的外,其它各项每个部门都会有所不同,那财政局是不是会为每个部门单独设计一个工资单呢?肯定不会,它只能是设计一个针对整个城市各个部门统一的工资单,虽然有些项对有些部门来说是用不到的。
    上边是点闲话,以下是解决方案:
    数据库设计无非有三种方法:
    1、针对所有的零件设计一个统一的数据库,有能共用的字段,也有针对某个零件的字段。
    这个我觉得最好。
    2、针对每个零件设计数据库。这个有点繁琐。
    3、折中一下,把相同项目多的零件弄成一组,给它们设计数据库。
    至于显示,我针对第一种方法说一下思路:
    DBGrid不要设固定的显示字段。查询完成后,对结果集的第一条记录(应该是那条都行)从头至尾循环,如果某字段值不为空(或0)就显示,这样就行了。代码应该是这样的:
    var
      i,j:integer;
    begin
      ADOQuery1.Open; //先要完成查询,条件你自己设
      dbgrid1.Columns.Clear;
      j:=0;
      for i:=0 to ADOQuery1.FieldCount-1 do
      if ADOQuery1.Fields[i].AsString<>'' then
      begin
        DBGrid1.Columns.Add;
        DBGrid1.Columns[j].FieldName:=ADOQuery1.Fields[i].FieldName;
        DBGrid1.Columns[j].Width:=60;
        //DBGrid1.Columns[j].Title.caption:=ADOQuery1.Fields[i].FieldName;
        //为了好看,可以加判断以显示中文字段名称,如:
        case i of  //注意,是i,不是j
          0: DBGrid1.Columns[j].Title.caption:='名称';
          1: DBGrid1.Columns[j].Title.caption:='长度';
          2: DBGrid1.Columns[j].Title.caption:='宽度';
          3: DBGrid1.Columns[j].Title.caption:='种类';
          4: DBGrid1.Columns[j].Title.caption:='直径';
          5: DBGrid1.Columns[j].Title.caption:='用途';
          6: DBGrid1.Columns[j].Title.caption:='ee';
          7: DBGrid1.Columns[j].Title.caption:='ff';
          8: DBGrid1.Columns[j].Title.caption:='gg';
          9: DBGrid1.Columns[j].Title.caption:='hh';
        end;
        //我觉得没好办法,只有判断30多次。
         j:=j+1;
      end;
    end;
      

  2.   

    表2查询结果 关联的dbgrid的每个field的visible与否,根据表1对应记录的是否来确定
      

  3.   

    自动建立DBEDIT和字段对称的方法在你的上两个贴子中已经给出。楼主没有怎么没有看到?
      

  4.   

    楼上好像不行,通过一个按钮,得出表格显示和EDIT同时筛选,完善不起来。
      

  5.   

    楼上好像不行,通过一个按钮,得出表格显示和EDIT同时筛选,完善不起来。
    我用的是FireMonkey HD窗体,没有DBEdit,只有Edit,我全部将DBEdit换成Edit,好像不行,出现错误。
      

  6.   

    Edits.DataSource :=self.DataSource1;
    这一行在FireMonkey HD模式下,如果改?即将上面一行改成FM下的代码可用?谁知道哦?
      

  7.   

    Edits.BindingSource :=self.DataSource1;
    这样也不行!