Chinaunix首页 | 论坛 | 博客
  • 博客访问: 368124
  • 博文数量: 715
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:46
文章分类

全部博文(715)

文章存档

2011年(1)

2008年(714)

我的朋友

分类:

2008-10-13 16:39:04

DataGrid控件用法详解

作者:





写在前面


  刚写这个题目,就觉得肩上重了,不知道自己能否对DataGrid详解之。希望大家共同指正。DataGrid控件是VC方便地用来显示数据的一个极好的网格控件,我不否认网上还有期它不少优秀的网格控件,但我总喜欢使用微软自已的东西 。除非它满足不了我的需要。不是我太依赖Microsoft,你想想,如果你最常用的开发工具是VC,VC是微软的主打开发工具,它与Windows系统的兼容性极好,连它的控件也不例外,你为何不先选用成熟的代码,如果它升级了,你的系统几乎不作改动就可以继续为你效劳,有什么不好,这不完全是那种无谓的依靠,而是利用 。更重要的是你可以更注重你的系统功能,而不是代码的细节。
  之所以要写这样的文章,因为有几个网友在问我网格控件的用法,我想也许其他朋友也有用(如果真的是这样,我很高兴)。

一、我先交待主要内容

  1. 在网格控件中显示查询的数据结果。
  2. 对网格控件的显示进行控制(如列宽)。
  3. 对网格内容格式进行控制(如将小于1的小数显示成百分数)

二、准备工作

  先建立一个工程,我的主框架选用对话框,然后插入你DataGrid控件,见如图1


图1

  找到Microsoft DataGrid OLEDB 6.0 控件,确定,出现图所示对话框,这个对话框中你要根据需要选择的类,这些类封装了这个控件的几乎所有功能有方法。这里我只选择了三个类:CDataGrid,CColumns,CColumn,如图2(我们知道,ActiveX是基于COM的,这三个类是对这个控件的COM查询接口的封装,使你在使用时几乎不知道自己在使用COM控件。正因为如此,你要想直接查看这个控件的源代码,也就不可能了。)


图2

三、功能实现及代码

1.在网格控件中显示查询的数据结果。

  数据库接库,并取得查询的数据结果。这里我使用了一个ADO封装类(当然你可以使用其它的方法方法数据库,而不会影响控件的使用)。

CADODatabase m_DBCn;//数据库对象
CADORecordset m_Rs;//记录集对象
CDataGRid m_ctrlDG;//DataGrid控件对象
...
CString strConnection; strConnection.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;")
      _T("Data Source=note.mdb")); 
m_DBCn.Open((LPCTSTR)strConnection); //打开程序数据库
m_Rs.SetDatabase(&m_DBCn); m_Rs.Open(_T("select * from test;")); //执行查询 
m_ctrlDG.SetRefDataSource((LPUNKNOW)m_Rs.GetRecordset());//显示在DataGrid控件中             

如图3:

图3

2.对网格控件的显示进行控制(如列宽)。 要实现对列的控制,就要先取得列对象。

CColumns cols = m_ctrlDG.GetColumns();//先取得列集
CColumn col = cols.GetItem(vt); //再取得列集中的列,由VARIANT vt变量指出列的索引号

  然后,你就可以对当前列为所欲为,这里我对它设置列宽 col.SetWidth(fWidth);//fWidth指定列宽 如图4


图4

3.对网格内容格式进行控制(如将小于1的小数显示成百分数)
要设置列的显示格式,还是要先取得列,再对它设置格式,取得列的方法同上。
col.SetNumberFormat(_T("0.0%"));//百分数格式 如图5


图5

4.除此之外,我们还可以对它多行显示,如图6

图6

5.另外,还可以利用消息机制,对控件的HeadClick消息处理,使控件能进行排序。 (具体情况参见源代码)

四、结束语

  细心的朋友会发现,查看相关类的方法名(函数名),能故名思意,看出控件的功能,另外在插入控件时,一般有也帮助文件,不过是针VB的,而且VB的调用方法与VC差别较大,但只有对比VC和VB方法名的相似之处,你还是可以很快对这款控件上手,并运用到你的项目中去。 
  本文源程序在VC6.0英语版,Windows XP调试通过,并附源程序(工程名 TestGrid)。DataGrid控件的功能远不止这此,希望本文能抛砖引玉,欢迎有兴趣的朋友交流 eMail:ChinaITBoy@163.com。


--------------------next---------------------

你那个CADODatabase类是哪里来的?
( jilu0002 发表于 2005-3-16 15:53:00)
 
同滚轮问题 ( 豆饼海盗 发表于 2004-12-15 13:55:00)
 
老哥,讲得也太简单了吧。你说的基本上都是大家知道的。说点内幕的东东。说说当用鼠标在控件内单击的时候,怎么得到光标所在的当前行的数据或行号。我在控件的SelChange事件里用GetRow()得到当前的行号。可是好像用鼠标在控件内单击根本不触发这个事件,控件内的那个当前行指针没变,还是原来那个,一定要单击每一行最前面那个空白像按钮一样的东西才改变当前行。老大要怎么样才能实现用鼠标在控件内单击,内部的那个指针也跟着动!还有DataGrid控件用鼠标拖动垂直滚动条,里面的记录不跟着滚动,一定要停下来,记录才一下就滚到拖到的地方,请大虾给小弟讲讲吧! ( xie_sir 发表于 2004-12-7 19:38:00)
 
我现在正在做关于DataGrid控件的项目,有个地方不是很明白。我用的是 _RecordsetPtr m_pWarnset;
   _ConnectionPtr pConnection;来连接数据库的。当调用m_grid.SetRefDataSource(m_pWarnset);后显示的DataGrid 控件中,垂直滚动条中的滚动块在中间位置,不知道该怎么解决? ( cyzdi1982 发表于 2004-8-13 15:34:00)
 
非常感谢大家的关心和批评,有此朋友提的问题我正在解决,时间真的很忙。希望大家多交流! ( itfish 发表于 2004-7-30 18:33:00)
 
的确算不上"详解",很功能不知道怎么用,我最讨厌它在大数据量下的滚动条,但我不会怎么用虚列表 ( tttl 发表于 2004-7-6 15:25:00)
 
这个...起名详解太牵强了吧 ( jink1025 发表于 2004-7-5 14:29:00)
 
最好能将鼠标滚轮用上(用滚轮上下翻页是很方便的呀) ( lixuebao 发表于 2004-7-4 16:26:00)
 
.......................................................

--------------------next---------------------

阅读(265) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~