想实际下面的报表,请问用什么控件简单一点,谢谢报表的结果如上
其中各列的显示都是通过脚本来实际的,即我的脚本是
select 会员号,办卡日期,修改日期,姓名,性别 from 会员档案
现在想问的是:如何才能点每列的头可以自动排序
网上说到一些方法列都是固定的,但我的列数是不固定的,比如下次我可能更新之后,把脚本改成了
select 会员号,办卡日期,姓名,性别 from 会员档案
这个时候查询的结果应该就没有修改日期这列,但我程序不用改,也能实现点列头自动排序,请大家指点

解决方案 »

  1.   

    还有请问用什么控件实现这个效果简单一点,网上一般都说用ehlib的dbgrideh来操作,其它还有更简单的吗?
      

  2.   

    dbgrid有OnTitleClick事件,在里面对所点击的列重新筛选排序
      

  3.   

    如果是dxdbgrid或者grideh等,设置先关属性后,可以自动实现
      

  4.   

    LZ的這個效果:用cxgrid控件或dbgrid即可實現這個效果你的效果圖如下:
      

  5.   

    我的空間裡有用cxgrid做的類似程序圖片,LZ可以參考一下
      

  6.   

    看以下代碼:1.绑定数据
    方法
    cxGrid1DBTableView1.DataController.DataSource:=DataSource1
    2.去掉"Drag   a   column   header   here   to   group   by   that   column"
    方法
    cxGrid1DBTableView1.OptionsView.GroupByBox置为False
    3.去掉表头下三角数据 
    方法
    cxGrid1DBTableView1.Optionscustomize.columnfiltering置为False
    4.增加序号
    方法
    在dataset 里边增加 Mycount 字段 类型为 string
    在 CXgrid 增加显示字段 序号 mycount
    为该字段写事件
    procedure Tfrm_form.ReDataSet2mycountGetText(Sender: TField;
      var Text: String; DisplayText: Boolean);
    begin
      inherited;
      text:=inttostr(redataset2.RecNo);
    end;将 序号 绑定 字段 Mycount5.CXgrid 增加一栏显示checkBox
    方法
    在dataset 里边增加 MySelect字段 类型为 BOOLEAN 在 CXgrid 增加显示字段 选择 select 设定select 字段的Properties为 CheckBox .  ReadOnly = False;
    NullStyle = nssUnchecked procedure Tfrm_form.cxGrid1DBTableView1CellClick(
      Sender: TcxCustomGridTableView;
      ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
      AShift: TShiftState; var AHandled: Boolean);
    var
      Row: Integer;
    begin
      inherited;  if ACellViewInfo.Item.Name = 'mycheck' then
      begin
        Row := cxGrid1DBTableView1.DataController.FocusedRecordIndex;
        if cxGrid1DBTableView1.ViewData.Records[Row].Values[0] = True then
          cxGrid1DBTableView1.ViewData.Records[Row].Values[0] := False
        else
          cxGrid1DBTableView1.ViewData.Records[Row].Values[0] := True;
      end;end; procedure Tfrm_form.cxGrid1DBTableView1MouseUp(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    var
      Row: Integer;
    begin
      inherited;
      //单选
      // for Row:=0 to  cxGrid1DBTableView1.DataController.RecordCount-1 do
      // begin
      //   cxGrid1DBTableView1.ViewData.Records[Row].Values[0] := False;
      // end;
      //多选
        if  cxGrid1DBTableView1.DataController.RecordCount<>0 then
      begin
       Row := cxGrid1DBTableView1.DataController.FocusedRecordIndex;  if cxGrid1DBTableView1.ViewData.Records[Row].Values[0] = True then
        cxGrid1DBTableView1.ViewData.Records[Row].Values[0] := False
      else
        cxGrid1DBTableView1.ViewData.Records[Row].Values[0] := True;
      end;
    end;