正文

转CListCtrl应用与排序2007-11-26 17:59:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/sword2008/31160.html

分享到:

http://cache.baidu.com/c?word=vc%2Cclistctrl%3B%C8%E7%BA%CE%3B%C5%C5%D0%F2&url=http%3A//www%2Ezixi%2Enet/article/show%2Easp%3Fid%3D32246%26Page%3D1&p=9f63861e85cc4aff57efcd6f4e&user=baidu#baidusnap1 编程环境VC初始化: DWORD dwStyle; dwStyle = m_bzlist.GetStyle(); dwStyle = LVS_EX_GRIDLINES LVS_EX_FULLROWSELECTLVS_SHOWSELALWAYS ; m_bzlist.SetExtendedStyle(dwStyle); m_bzlist.SetBkColor(RGB(0xec,0xf1,0xfd)); m_bzlist.SetTextBkColor(RGB(0xfe,0xFF,0xc6));插入一列: m_bzlist.InsertColumn(0,"编号"); m_bzlist.SetColumnWidth(0,50);插入一行:方法1: LV_ITEM lvitem; lvitem.pszText=""; lvitem.mask=LVIF_TEXT; lvitem.iSubItem=0; lvitem.iItem=0; m_jbxxlist.InsertItem(&lvitem); m_jbxxlist.SetItemText(0,0,xh); m_jbxxlist.SetItemText(0,1,xm); m_jbxxlist.SetItemText(0,2,nj); 方法2: m_yktlist.InsertItem(i,"2"); m_yktlist.SetItemText(i,0,s);   m_yktlist.SetItemText(i,1,xh); m_yktlist.SetItemText(i,2,xm);读取数据  resultlist.GetItemText(行数, 列数);   每行前有复选框的列表:初始化时使用LVS_EX_CHECKBOXES属性DWORD dwStyle;dwStyle = m_yktlist.GetStyle();dwStyle = LVS_EX_GRIDLINES LVS_EX_FULLROWSELECTLVS_EX_CHECKBOXES ;m_yktlist.SetExtendedStyle(dwStyle);设置选中:m_yktlist.SetItemState (行数,0x2000, LVIS_STATEIMAGEMASK);//设为选中状态判断是否选中:m_yktlist.GetItemState(行数,LVIS_STATEIMAGEMASK)==0x2000//选中     实现点击列头排序: 定义可以排序的列表类只需要多定义两个变量class SortCListCtrl : public CListCtrl{// Constructionpublic: SortCListCtrl(); // Attributespublic: BOOL m_fAsc;//是否顺序排序 int m_nSortedCol;//当前排序的列 ....}在使用可以排序列表时 实例化自己的变量 SortCListCtrl m_yktlist; //响应点击列函数void CAuditingCertView::OnColumnclickListYkt(NMHDR* pNMHDR, LRESULT* pResult) {  for (int i = 0; i < m_yktlist.GetItemCount(); ++i) {  m_yktlist.SetItemData(i, i);//供排序使用的item编号 }  NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;  //设置排序方式 if( pNMListView->iSubItem ==m_yktlist.m_nSortedCol )  m_yktlist.m_fAsc = !m_yktlist.m_fAsc; else {  m_yktlist.m_fAsc = TRUE;  m_yktlist.m_nSortedCol = pNMListView->iSubItem; } //调用排序函数,此函数为CListCtrl定义好的,但是需要调用我们定义的函数才比较任意两个项目的值 m_yktlist.SortItems(MyListCompare, (LPARAM)&m_yktlist);  for ( i = 0; i < m_yktlist.GetItemCount(); ++i){  m_yktlist.SetItemData(i, i);//供排序使用的item编号  CString s;  s.Format("%d",i+1);//编号  m_yktlist.SetItemText(i,0,s);   } *pResult = 0;} ///全局函数,比较两个项目的依据int CALLBACK  MyListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort){ //通过传递的参数来得到CSortList对象指针,从而得到排序方式 SortCListCtrl * pV=(SortCListCtrl *)lParamSort; //通过ItemData来确定数据 CString szComp1,szComp2; int iCompRes; szComp1=pV->GetItemText(lParam1,pV->m_nSortedCol); szComp2=pV->GetItemText(lParam2,pV->m_nSortedCol); switch(pV->m_nSortedCol) { case(0):  //以第一列为根据排序 编号  iCompRes=atof(szComp1)<=atof(szComp2)?-1:1;  break; case(4):  //以第5列为根据排序 总次数  iCompRes=atof(szComp1)<=atof(szComp2)?-1:1;  break; default:  iCompRes=szComp1.Compare(szComp2);  break; } //根据当前的排序方式进行调整 if(pV->m_fAsc)  return iCompRes; else  return -iCompRes;  } 导出数据为excel文件使用ODBC将数据输出到excel数据区  void ExportAsExcel(CString filename,CListCtrl &resultlist,CWnd * wnd){ CDatabase database; CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel安装驱动 CString sSql,sExcelFile; //弹出对话框选择路径    CFileDialog fileDlg (FALSE, "Path", filename,OFN_FILEMUSTEXIST OFN_HIDEREADONLY, "*.xls",wnd); if( fileDlg.DoModal()==IDOK) {  sExcelFile = fileDlg.GetPathName();    // 要建立的Excel文件  CFileFind finder;  BOOL bWorking = finder.FindFile(sExcelFile);//寻找文件  if (bWorking)//如果已经存在文件,则删除  {   CFile::Remove((LPCTSTR)sExcelFile);  }  } else return;  TRY {  // 创建进行存取的字符串  sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, sExcelFile, sExcelFile);    // 创建数据库 (既Excel表格文件)  if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )  {   CHeaderCtrl* pHeader = resultlist.GetHeaderCtrl();   //获得行,列的个数   int nColCount = pHeader->GetItemCount();   int nLineCount = resultlist.GetItemCount();   int ColOrderArray[100];   CString ca[100];   resultlist.GetColumnOrderArray(ColOrderArray, nColCount);   //检索各列的信息 [1] [2]  下一页    

阅读(6765) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册