DataSnap DBGrid DateTimePicker 组合输入日期值

    对于DataSnap三层数据库软件,对于日期格式要求比较严格,xxxxxx如日期采用“yyyy-MM-dd”格式,人工输入时,常会出现错误,将“2014-01-01”会错误录入成“2014-1-1”。为了避免用户录入错误。在DBGrid录入时,通过DateTimePicker规范录入格式,起到减少错误的效果。笔者通过参考网上的例子,通过DateTimePicker与DBGrid两控件的结合,将DateTimePicker镶嵌在DBGrid的Cell中,实现日期的录入。
实现如下:
    一、编程环境:
    1、涉及控件:TDBGird,TDateTimePicker,TClientDataSet(三层客户端必须)。
    2、需要通过DateTimePicker录入的 字段名:入院日期,出院日期。
    本例中使用中文字段名,一个DBGrid中可以多个字段,使用TDateTimePicker格式化录入。

 

    二、在DBGrid边缘加入一个TDateTimePicker控件,取名DateTimePicker。

    设置DateTimePicker.Visible:=False

   

   三、在启动DBGrid显示事件中,加入以下代码,确保相关字段宽度。

DBGrid2.Columns.Items[7].Width:=DBGrid2.Canvas.TextWidth('1234567890123');
DBGrid2.Columns.Items[8].Width:=DBGrid2.Canvas.TextWidth('1234567890123');
 

    四、在DBGrid的DBGrid2DrawColumnCell事件加入代码,功能是在选择的字段Cell中显示DateTimePicker,其它字段隐藏TDateTimePicker。


procedure THealthRecordsFrm.DBGrid2DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if (gdFocused in State) then
  begin
    if (Column.Field.FieldName = 入院日期') or (Column.Field.FieldName = '出院日期)
    then begin
      sField:=Column.Field.FieldName;
      with DateTimePicker do
      begin
        Left := Rect.Left + DBGrid2.Left + 1;
        Top := Rect.Top + DBGrid2.Top + 1;
        Width := Rect.Right - Rect.Left + 2;
        Width := Rect.Right - Rect.Left + 2;
        Height := Rect.Bottom - Rect.Top + 2;
        if length(DataModule1.ClientDataSet2.FieldByName(sField).asString)=10
          then Date:=StrToDate(DataModule1.ClientDataSet2.FieldByName(sField).asString)
          else Date:=Now;
        Visible := True;
      end;
    end
    else DateTimePicker.Visible := False;
  end
end;

 

    五、在DateTimePickerChange事件中,加入以下代码,功能是确定日期后,录入DBGrid的Cell中。

procedure THealthRecordsFrm.DateTimePickerChange(Sender: TObject);
begin
  DataModule1.ClientDataSet2.Edit;
  DataModule1.ClientDataSet2.FieldByName(sField).asString
    :=FormatdateTime('yyyy-MM-dd',DateTimePicker.Date);
  DataModule1.ClientDataSet2.Post;
end;

 

    六、在DBGrid2KeyPress事件中,加入以下代码,功能中当录入“回格”字符时,删除Cell值,取消DateTimePicker录入,可以通过手工录入。
procedure THealthRecordsFrm.DBGrid2KeyPress(Sender: TObject;
  var Key: Char);
begin
  if (key = Chr(8)) then
  begin
    DataModule1.ClientDataSet2.Edit;
    DataModule1.ClientDataSet2.FieldByName(sField).asString:='';
    DataModule1.ClientDataSet2.Post;
    DateTimePicker.Visible:=False;
  end;
end;

 

DataSnap DBGrid DateTimePicker 组合输入日期值_第1张图片

    通过上述代码,完成将DateTimePicker镶嵌在DBGrid的Cell中,实现日期的录入。

你可能感兴趣的:(DataSnap DBGrid DateTimePicker 组合输入日期值)