我想在LISTVIEW中的某一个网格里放俩个时间控件,一个DateTimePicker选择日期,另外一个DateTimePicker选择时间,然后我要将日期和时间组合成一个字符串保存到数据表里,所以该字段不可以是DATETIME类型,因为这个字段的长度超出了8,要既显示日期又要显示时间。我不知道如何将DateTimePicker控件放在LISTVIEW上,请大家帮忙,谢谢。

解决方案 »

  1.   

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      DateTimePicker1.Left:=0;
      DateTimePicker1.Top:=0;
      DateTimePicker1.Parent:=ListView1;
    end;
      

  2.   

    我回帖子都是测试后再发的。注意显示位置,DateTimePicker1得left和top都是以ListView1为基准的。
    否则有可能看不到。
      

  3.   

    楼上,我按照你的写法怎么测试都不行,可以QQ联系一下吗,我的QQ号码:13619286,谢谢。
      

  4.   

    哦,flyforlove(为情飞) ,你误解我的意思了,你的意思是在LISTVIEW中只放了一个DATETIMEPICKER,但是我的意思是要在LISTVIEW中比如第三列的所有行都要放上DATETIMEPICKER。
      

  5.   

    那只能靠你自己去定位了,你也可以直接把DATETIMEPICKE放到LISTVIEW(其实DATETIMEPICKE的父窗体是form),在设计期放置空间。
      

  6.   

    我在dbgrid里实现过,就是利用控件的自绘功能。下面是两段主要代码:
    首先在dbgrid上放一个DateTimePicker控件,设置visible为false。
    如有不明白 QQ 120861370
    //dd 是DateTimePicker控件
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
    if (gdFocused in State) then
    begin
    if column.Field.FieldName='datetime' then
      begin
          dd.Left := Rect.Left + DBGrid1.Left + 1;
          dd.Top := Rect.Top + DBGrid1.Top + 1;
          dd.Width := Rect.Right - Rect.Left + 2;
          dd.Height := Rect.Bottom - Rect.Top + 2;
          dd.Visible:=true;
      end;
      end;
    end;
    //改写数据库
    procedure TForm1.ddChange(Sender: TObject);
    begin
    if DBGrid1.DataSource.State in [dsEdit, dsInsert] then
        begin
          dd.Time:=time;
          ADOTable1.FieldByName('datetime').Value := dd.DateTime;
        end;
    end;
      

  7.   

    "我的意思是要在LISTVIEW中比如第三列的所有行都要放上DATETIMEPICKER"hehe,太不实际了吧? 若有一千行数据要放一千个TDATETIMEPICKER控件吗?
    一般是选中哪一行就在哪一行显示出TDATETIMEPICKER控件,提供选择后隐藏...
      

  8.   

    楼上的 cronuz(cronus),我就是你说的意思,只是没有表达明白