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] 下一页

评论