QQ登录

只需一步,快速开始

266上位机VC MFC使用ODBC在列表视图中排序显示记录

[ 复制链接 ]

266上位机VC MFC使用ODBC在列表视图中排序显示记录

266上位机VC MFC使用ODBC在列表视图中排序显示记录
266上位机VC MFC使用ODBC在列表视图中排序显示记录


功能展示
在列表视图中显示数据记录后,有时想按照一定的顺序排列视图中的数据记录方便查看,我们当前例程实现了按ID,NAME,YEAR三种方式排序数据条目的功能,效果如图,点击排序菜单,选择里面的三种排序按钮可以实现三种不种的排序功能;

要点提示
1.数据的排序功能实现只要对Crecordset类的成员变量m_strSort进行赋值就可,如果我们当前例程的代码m_pODBCSet->m_strSort=“ID”;就是按照ID进行排序,另外排序前记得调用Crecordset类的成员函数MoveFirst()一次
实现功能
1.新建一数据源再新建基于单文档的应用程序,记得视窗派生于CListView;
2.再用类向导新建一基于Crecordset的类CODBCSet,记得类型选择dynaset ;
在文档中类中添加此类的头文件#include “ODBCSet.h”及变量public:CODBCSetm_ODBCSet;在视窗中添加此类的头文件#include “ODBCSet.h”及变量public:CODBCSet * m_pODBCSet; CListCtrl* m_List;
3.在视窗的构造函数中初始变化量,及析构函数中关闭记录集
  1. CGkbc8View::CGkbc8View()
  2. {
  3.         m_pSet=NULL;
  4.         m_List=&GetListCtrl();//获取列表视图控件
  5.         m_dwDefaultStyle|=LVS_REPORT;//以报表的格式显示
  6. }
  7. CGkbc8View::~CGkbc8View()
  8. {
  9.         if(m_pSet->IsOpen())        
  10.         m_pSet->Close();
  11. }
复制代码
4.在文档类添加视窗头文件#include "gkbc8View.h"并在OnNewDocument()函数中初始化视窗类的变量m_ODBCSet
  1. POSITION pos;
  2.         pos=GetFirstViewPosition();
  3.         CGkbc8View* pView;
  4.         pView=(CGkbc8View*)GetNextView(pos);
  5.         pView->m_pODBCSet=&m_ODBCSet;
复制代码
5.在视窗类的OnInitialUpdate()函数中实现数据表内容的全部显示
  1. void CGkbc8View::OnInitialUpdate()
  2. {
  3.         CListView::OnInitialUpdate();

  4.         CODBCFieldInfo DbFi;//存储记录集字段信息的结构体
  5.         LV_COLUMN Lc;//存储列信息的结构体
  6.         if(!m_pODBCSet->IsOpen())
  7.                 m_pODBCSet->Open();//打开记录集
  8.         for(int i=0;i<m_pODBCSet->m_nFields;i++)
  9.         {
  10.                 m_pODBCSet->GetODBCFieldInfo(i,DbFi);
  11.                 Lc.iSubItem=i;
  12.                 Lc.fmt=LVCFMT_CENTER;
  13.                 Lc.cx=DbFi.m_strName.GetLength()*10+16;
  14.                 Lc.pszText=DbFi.m_strName.GetBuffer(DbFi.m_strName.GetLength());
  15.                 GetListCtrl().InsertColumn(i,&Lc);
  16.                 GetListCtrl().SetColumnWidth(i,100);
  17.         }
  18.         Sort(0);
  19. }
复制代码
6.其中Sort()函数为我们自定义函数
  1. void CGkbc8View::Sort(UINT nIndex)
  2. {
  3.         m_pODBCSet->MoveFirst();//从第一个记录开始
  4.         if(m_pODBCSet->IsEOF())//记录集是否为空
  5.         {
  6.                 AfxMessageBox("记录集没有记录");
  7.                 return;
  8.         }

  9.         m_List->DeleteAllItems();
  10.         LV_ITEM m_item;//条目结构体对象
  11.         CString string;//字符串临时变量
  12.         int i =0;
  13.         if(nIndex==0)//按学号排序**********
  14.         {
  15.                 m_pODBCSet->Close();
  16.                 m_pODBCSet->m_strSort="ID";
  17.                 m_pODBCSet->Open(CRecordset::snapshot,NULL,CRecordset::readOnly);
复制代码
  1. while(m_pODBCSet->IsEOF()==0)//是否到达最后一个记录
  2.                 {
  3.                     m_item.mask=LVIF_TEXT;
  4.                     m_item.iItem=i;
  5.                     m_item.iSubItem=0;
  6.                     m_pODBCSet->GetFieldValue((short)0,string);
  7.                     m_item.pszText=string.GetBuffer(string.GetLength());
  8.                     m_List->InsertItem(&m_item);//插入条目
  9.                     //显示列数据
  10.                     for(int j=1;j<m_pODBCSet->m_nFields;j++)
  11.                         {
  12.                             m_pODBCSet->GetFieldValue((short)j,string);
  13.                             m_List->SetItemText(i,j,string.GetBuffer(string.GetLength()));
  14.                         }
  15.                     m_pODBCSet->MoveNext();//下移记录
  16.                     i++;
  17.                 }
  18.         }
  19.         else if(nIndex==1)//按姓名排序**************
  20.         {
  21.                 m_pODBCSet->Close();
  22.                 m_pODBCSet->m_strSort="Name";
  23.                 m_pODBCSet->Open(CRecordset::snapshot,NULL,CRecordset::readOnly);
  24.                 while(m_pODBCSet->IsEOF()==0)//是否到达最后一个记录
  25.                 {
  26.                         m_item.mask=LVIF_TEXT;
  27.                         m_item.iItem=i;
  28.                         m_item.iSubItem=0;
  29.                         m_pODBCSet->GetFieldValue((short)0,string);
  30.                         m_item.pszText=string.GetBuffer(string.GetLength());
  31.                         m_List->InsertItem(&m_item);//插入条目
  32.                         //显示列数据
  33.                         for(int j=1;j<m_pODBCSet->m_nFields;j++)
  34.                         {
  35.                                 m_pODBCSet->GetFieldValue((short)j,string);
  36.                                 m_List->SetItemText(i,j,string.GetBuffer(string.GetLength()));
  37.                         }
  38.                         m_pODBCSet->MoveNext();//下移记录
  39.                         i++;
  40.                 }
  41.         }
  42.         else if(nIndex==2)//按毕业时间排序*****************
  43.         {
复制代码
  1. m_pODBCSet->Close();
  2.                 m_pODBCSet->m_strSort="GradYear";
  3.                 m_pODBCSet->Open(CRecordset::snapshot,NULL,CRecordset::readOnly);
  4.                 while(m_pODBCSet->IsEOF()==0)//是否到达最后一个记录
  5.                 {
  6.                         m_item.mask=LVIF_TEXT;
  7.                         m_item.iItem=i;
  8.                         m_item.iSubItem=0;
  9.                         m_pODBCSet->GetFieldValue((short)0,string);
  10.                         m_item.pszText=string.GetBuffer(string.GetLength());
  11.                         m_List->InsertItem(&m_item);//插入条目
  12.                         //显示列数据
  13.                         for(int j=1;j<m_pODBCSet->m_nFields;j++)
  14.                         {
  15.                                 m_pODBCSet->GetFieldValue((short)j,string);
  16.                                 m_List->SetItemText(i,j,string.GetBuffer(string.GetLength()));
  17.                         }
  18.                         m_pODBCSet->MoveNext();//下移记录
  19.                         i++;
  20.                 }
  21.         }
  22. }
复制代码
7.添加三个菜单按钮实现不同排序功能
  1. void CGkbc8View::OnSortId()
  2. {
  3.         Sort(0);
  4. }
  5. void CGkbc8View::OnSortName()
  6. {
  7.         Sort(1);        
  8. }
  9. void CGkbc8View::OnSortYear()
  10. {
  11.         Sort(2);        
  12. }
复制代码
最后记录在stdafx.h头文件上包含数据库支持的头文件#include <afxdb.h>  
我们来演示功能实现的整个过程
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:266.上位机VC MFC使用ODBC在列表视图中排序显示记录.zip 
文件大小:44.86 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索