工控编程吧
标题:
266上位机VC MFC使用ODBC在列表视图中排序显示记录
[打印本页]
作者:
qq263946146
时间:
2016-5-1 14:26
标题:
266上位机VC MFC使用ODBC在列表视图中排序显示记录
(, 下载次数: 2)
上传
点击文件名下载附件
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.在视窗的构造函数中初始变化量,及析构函数中关闭记录集
CGkbc8View::CGkbc8View()
{
m_pSet=NULL;
m_List=&GetListCtrl();//获取列表视图控件
m_dwDefaultStyle|=LVS_REPORT;//以报表的格式显示
}
CGkbc8View::~CGkbc8View()
{
if(m_pSet->IsOpen())
m_pSet->Close();
}
复制代码
4.在文档类添加视窗头文件#include "gkbc8View.h"并在OnNewDocument()函数中初始化视窗类的变量m_ODBCSet
POSITION pos;
pos=GetFirstViewPosition();
CGkbc8View* pView;
pView=(CGkbc8View*)GetNextView(pos);
pView->m_pODBCSet=&m_ODBCSet;
复制代码
5.在视窗类的OnInitialUpdate()函数中实现数据表内容的全部显示
void CGkbc8View::OnInitialUpdate()
{
CListView::OnInitialUpdate();
CODBCFieldInfo DbFi;//存储记录集字段信息的结构体
LV_COLUMN Lc;//存储列信息的结构体
if(!m_pODBCSet->IsOpen())
m_pODBCSet->Open();//打开记录集
for(int i=0;i<m_pODBCSet->m_nFields;i++)
{
m_pODBCSet->GetODBCFieldInfo(i,DbFi);
Lc.iSubItem=i;
Lc.fmt=LVCFMT_CENTER;
Lc.cx=DbFi.m_strName.GetLength()*10+16;
Lc.pszText=DbFi.m_strName.GetBuffer(DbFi.m_strName.GetLength());
GetListCtrl().InsertColumn(i,&Lc);
GetListCtrl().SetColumnWidth(i,100);
}
Sort(0);
}
复制代码
6.其中Sort()函数为我们自定义函数
void CGkbc8View::Sort(UINT nIndex)
{
m_pODBCSet->MoveFirst();//从第一个记录开始
if(m_pODBCSet->IsEOF())//记录集是否为空
{
AfxMessageBox("记录集没有记录");
return;
}
m_List->DeleteAllItems();
LV_ITEM m_item;//条目结构体对象
CString string;//字符串临时变量
int i =0;
if(nIndex==0)//按学号排序**********
{
m_pODBCSet->Close();
m_pODBCSet->m_strSort="ID";
m_pODBCSet->Open(CRecordset::snapshot,NULL,CRecordset::readOnly);
复制代码
while(m_pODBCSet->IsEOF()==0)//是否到达最后一个记录
{
m_item.mask=LVIF_TEXT;
m_item.iItem=i;
m_item.iSubItem=0;
m_pODBCSet->GetFieldValue((short)0,string);
m_item.pszText=string.GetBuffer(string.GetLength());
m_List->InsertItem(&m_item);//插入条目
//显示列数据
for(int j=1;j<m_pODBCSet->m_nFields;j++)
{
m_pODBCSet->GetFieldValue((short)j,string);
m_List->SetItemText(i,j,string.GetBuffer(string.GetLength()));
}
m_pODBCSet->MoveNext();//下移记录
i++;
}
}
else if(nIndex==1)//按姓名排序**************
{
m_pODBCSet->Close();
m_pODBCSet->m_strSort="Name";
m_pODBCSet->Open(CRecordset::snapshot,NULL,CRecordset::readOnly);
while(m_pODBCSet->IsEOF()==0)//是否到达最后一个记录
{
m_item.mask=LVIF_TEXT;
m_item.iItem=i;
m_item.iSubItem=0;
m_pODBCSet->GetFieldValue((short)0,string);
m_item.pszText=string.GetBuffer(string.GetLength());
m_List->InsertItem(&m_item);//插入条目
//显示列数据
for(int j=1;j<m_pODBCSet->m_nFields;j++)
{
m_pODBCSet->GetFieldValue((short)j,string);
m_List->SetItemText(i,j,string.GetBuffer(string.GetLength()));
}
m_pODBCSet->MoveNext();//下移记录
i++;
}
}
else if(nIndex==2)//按毕业时间排序*****************
{
复制代码
m_pODBCSet->Close();
m_pODBCSet->m_strSort="GradYear";
m_pODBCSet->Open(CRecordset::snapshot,NULL,CRecordset::readOnly);
while(m_pODBCSet->IsEOF()==0)//是否到达最后一个记录
{
m_item.mask=LVIF_TEXT;
m_item.iItem=i;
m_item.iSubItem=0;
m_pODBCSet->GetFieldValue((short)0,string);
m_item.pszText=string.GetBuffer(string.GetLength());
m_List->InsertItem(&m_item);//插入条目
//显示列数据
for(int j=1;j<m_pODBCSet->m_nFields;j++)
{
m_pODBCSet->GetFieldValue((short)j,string);
m_List->SetItemText(i,j,string.GetBuffer(string.GetLength()));
}
m_pODBCSet->MoveNext();//下移记录
i++;
}
}
}
复制代码
7.添加三个菜单按钮实现不同排序功能
void CGkbc8View::OnSortId()
{
Sort(0);
}
void CGkbc8View::OnSortName()
{
Sort(1);
}
void CGkbc8View::OnSortYear()
{
Sort(2);
}
复制代码
最后记录在stdafx.h头文件上包含数据库支持的头文件#include <afxdb.h>
我们来演示功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/7be1882082577143956906d6eac6e25c/0/0/w_19rsu1mzz1.swf-albumId=6383591409-tvId=6383591409-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4