大俠們都來幫我吧!

解决方案 »

  1.   

    为了实现数据控件以及代码的重用性,我们往往不能直接利用控件进行设置,而需动态设定。下面是部分代码(delphi6+win98se通过): 1.下拉列表 
    //初始化PickList 
    Function TfrmDataModule.InitPickList(FieldName,TableName:String;isNull:boolean):TStrings; 
    var 
    Uclstring1:TStrings; 
    ADOQuery1:TADOQuery; 
    begin 
    Uclstring1:=TStringList.Create; 
    ADOQuery1:=TADOQuery.Create(self); 
    with ADOQuery1 do 
    begin 
    Connection:=ADOConnection1; 
    SQL.Add('Select Distinct '+FieldName+' From '+TableName); 
    open; 
    if isNull then Uclstring1.Add(''); 
    while not Eof do 
    begin 
    Uclstring1.Add(Fieldbyname(FieldName).asstring); 
    next; 
    end; 
    Result:=Uclstring1; 
    Free; 
    end; 
    end; 调用实例: 
    //... 
    dbgrid1.Columns.Items[8].PickList:=frmDataModule.InitPickList('F_ware','ware',True); 
    //... 2.弹出窗口 
    procedure TfrmWarManSend.FormShow(Sender: TObject); 
    var 
    I:integer; 
    begin 
    //... 
    with DBgrid1 do 
    begin 
    for I:= 0 to Columns.Count-1 do 
    Columns.Items[I].Title.Alignment:=taCenter; 
    Columns.Items[0].ButtonStyle:=cbsEllipsis;//弹出按钮形状 
    OnEditButtonClick:=BitBtnCodeLookClick;//激活时,对应的事件(本人的按钮BitBtnCodeLookClick事件是弹出一个选择窗口,也即是当光标处于第一列编辑状态时,当列右则自动出现一个按钮,单击就弹出窗口) 
    end; 
    //... 
    end; //另一个弹出窗口的技巧(当光标处于第一列且编辑状态时,按空格键直接弹出窗口). 
    procedure TfrmWarManSend.FormKeyDown(Sender: TObject; var Key: Word; 
    Shift: TShiftState); 
    begin 
    if (Key=VK_space) and (dbgrid1.SelectedIndex=0) and (frmDataModule.DataSource1.State in [dsEdit,dsInsert]) then 
    BitBtnCodeLookClick(sender); 
    end; 
      

  2.   

    如果是簡單的運用,用dxDBGrid吧,不過它對圖形字段直接顯示的支持"有限"
    另:創建一個控件你到大富翁論壇上去搜索一下,很多很多
      

  3.   

    的确很多,不过我觉的还是别用dbgrid的好,以前我也老是想在dbgrid插入控件,问题是可以解决,可我发觉如果用dbgrideh,或者dxDBgird很方便就解决!所以以后就没有多用dbgrid了!
      

  4.   

    大俠們,哪裡有dxdbgrid或dbgrideh?
      

  5.   

    以下是我插TDateTimePicker程序,调试已通过。
    procedure TfrmProductplan.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
       if (gdfocused in state) or (gdSelected in state) then
       begin
          if Column.FieldName='HopeDate' then
          begin
             Dtp1.Left :=rect.Left +dbgrid1.Left ;
             Dtp1.Top :=rect.Top +dbgrid1.Top ;
             Dtp1.Width :=rect.Right -rect.Left ;
             Dtp1.Height :=rect.Bottom -rect.Top+3 ;
             Dtp1.Width:=Dbgrid1.Columns[6].Width;
             if trim(AQBill.FieldByName('HopeDate').AsString)<>'' then
             dtp1.Date:=StrToDate(Str8Date(AQBill.FieldByName('HopeDate').AsString));
             Dtp1.Visible :=true;
          end
          else
          begin
             Dtp1.Visible :=False;
          end;
       end
       else
       begin
          Dtp1.Visible :=False;
       end;
    end;procedure TfrmProductplan.DBGrid1ColExit(Sender: TObject);
    begin
       if dbgrid1.SelectedField.FieldName <>'HopeDate' then
          Dtp1.Visible :=false;
    end;