一个好用的VC DBGRID[图]

本文示例源代码下载

    CGridCtrl_demo19_01.zip为演示CGridCtrl的使用

  CGridCtrl_demo19_02.zip演示与CMYODBC的配合使用

  一、引言

  在用vc开发关于数据库的项目时,通常我们只好用微软的DBGRID作为数据库表格控件,其实微软的DBGRID并不好用,想找一份好的帮助文档都找不到,并且界面并不友好,比起C++Builder中的DBGRID来说是逊色不少,但是DBGRID在开发数据库的项目中又是常用的控件,所以就一直想找一个好用的DBGRID,可是网上又没有找到。上次在无意中看到了CGridCtrl(一个很漂亮的表格控件,如果你还没有用过,可以到http://www.codetools.com/miscctrl/gridctrl.asp/下载,上面还有详细的使用说明)支持虚模式,在这种模式下,即使你向这个表格插入一百万条数据,它并不会真的生成一百万行,而是随着你的滚动条的滚动,计算出在屏幕上要显示的行和列,然后会向你提供一个接口,通过这个接口,你可以在这儿设置你要显示的数据。这给了我一些启示,我决定用它来做一个DBGRID。下面的例子是它的一个应用。

一个好用的VC DBGRID[图]

  二、原理

  DBGRID和一般的GRID的不同之处在于,一般的GRID并不适合显示大的数据量,如果你的一个查询结果有上万条记录的话,如果你都要插入到GRID中,这将是一个很慢的过程,并且你在GRID中移动滚动条的话,它的记录的滚动也是很慢的,而DBGRID并不会真正把这些记录的数据全部插入到控件中,当DBGRID的滚动条滚动时,它会根据DBGRID的显示面积的大小和查询得到的总的记录数计算出当前应该显示哪那些行,然后会把那几行的记录数据插入到表格中,这样速度当然是很快的,而且没有数据量多少的限制。

  幸运的是,CGridCtrl类已经为我们提供了这种机制,它是采用虚模式的方式,要使用这种方式,按照以下的步骤就可以了:

  步骤一 初始化

void SetVirtualMode(TRUE) 设为虚模式
BOOL SetRowCount(int nRows) 设置总的行数。
BOOL SetFixedRowCount(int nFixedRows = 1)设置固定的行数据
BOOL SetColumnCount(int nCols)  设置列数
BOOL SetFixedColumnCount(int nFixedCols = 1)设置固定的列数
  步骤二 响应消息 显示数据

  我们假设CGridCtrl是放在对话框上,而且它关联的变量是m_Grid,利用ClassWizard添加对话框的OnNotify响应函数。这个响应函数的写法是固定的,类似下面的代码:

  BOOL CMyOdbcDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
   if (wParam == (WPARAM)m_Grid.GetDlgCtrlID())
   {
     *pResult = 1;
     GV_DISPINFO *pDispInfo = (GV_DISPINFO*)lParam;
     if (GVN_GETDISPINFO == pDispInfo->hdr.code)
     {
     /*这是我们自己加的函数,在这个函数里我们设置当前要显示的数据*/
       SetGridItem(pDispInfo);
       return TRUE;
     }
   }
   return CDialog::OnNotify(wParam, lParam, pResult);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Delphi 7 的 DBGrid 控件的每行数据中显示一个按钮,你可以使用 TDBGridButtonColumn 组件并设置其 ButtonStyle 属性为 bsGlyph。 以下是一个简单的示例: 1. 在 Delphi 7 的窗体设计器中,将一个 TDBGrid 组件放置在你的窗体上。 2. 在窗体上放置一个 TDataSource 组件,并将其 DataSet 属性设置为你要在 DBGrid 中显示的数据集3. 打开 DBGrid 的 Columns 属性编辑器。点击右侧的“添加”按钮,选择 "TColumn" 类型。 4. 在 "TColumn Editor" 对话框中,选择 "TDBGridButtonColumn" 类型。 5. 在 "TDBGridButtonColumn Editor" 对话框中,设置 ButtonStyle 属性为 bsGlyph。 6. 在 "TDBGridButtonColumn Editor" 对话框中,为 Glyph 属性选择一个合适的标,用于表示按钮。 7. 在 DBGrid 的 OnDrawColumnCell 事件中编写代码来绘制按钮。 ```delphi procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var ButtonRect: TRect; ButtonWidth: Integer; begin if (Column is TDBGridButtonColumn) and (gdFocused in State) then begin ButtonWidth := 18; // 按钮的宽度 ButtonRect.Left := Rect.Right - ButtonWidth - 2; ButtonRect.Right := Rect.Right - 2; ButtonRect.Top := Rect.Top + 2; ButtonRect.Bottom := Rect.Bottom - 2; DBGrid1.Canvas.Pen.Color := clBtnFace; DBGrid1.Canvas.Brush.Color := clBtnFace; DBGrid1.Canvas.Rectangle(ButtonRect); // 在按钮上绘制标 ImageList1.Draw(DBGrid1.Canvas, ButtonRect.Left + 2, ButtonRect.Top + 2, 0); end; end; ``` 请确保你已经将一个 TImageList 组件放置在窗体上,并将其 Images 属性设置为包含所需标的像列表。 现在,每行数据将在最后一列显示一个带有标的按钮。你可以根据需要自定义按钮的样式、位置和绘制方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值