编程环境VC
初始化: DWORD dwStyle; dwStyle = m_bzlist.GetStyle(); dwStyle |= LVS_EX_GRIDLINES |LVS_EX_FULLROWSELECT|LVS_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_FULLROWSELECT|LVS_EX_CHECKBOXES ; m_yktlist.SetExtendedStyle(dwStyle); 设置选中: m_yktlist.SetItemState (行数,0x2000, LVIS_STATEIMAGEMASK);//设为选中状态 判断是否选中: m_yktlist.GetItemState(行数,LVIS_STATEIMAGEMASK)==0x2000//选中 实现点击列头排序: 定义可以排序的列表类 只需要多定义两个变量 class SortCListCtrl : public CListCtrl { // Construction public: SortCListCtrl(); // Attributes public: 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); //检索各列的信息,确定列标题的内容 for(int i =0 ; i< nColCount; i++) { LVCOLUMN lvc; char text[100]; lvc.mask = LVCF_TEXT|LVCF_SUBITEM; lvc.pszText = text; lvc.cchTextMax = 100; resultlist.GetColumn(ColOrderArray[i], &lvc); ca[i] = lvc.pszText; } // 创建表结构 CString tempsql="("; for(i =0 ; i< nColCount-1; i++) { tempsql+=ca[i]; tempsql+=" TEXT,"; } tempsql+=ca[nColCount-1]; tempsql+=" TEXT)"; sSql = "CREATE TABLE Sheet1 "; sSql+=tempsql; database.ExecuteSQL(sSql); //插入数据 int item_count=resultlist.GetItemCount(); tempsql="("; for(i =0 ; i< nColCount-1; i++) { tempsql+=ca[i]; tempsql+=" ,"; } tempsql+=ca[nColCount-1]; tempsql+=")"; for(int itemnum=0;itemnum<item_count;itemnum++){ sSql=""; sSql ="INSERT INTO Sheet1 "; sSql+=tempsql; sSql+="VALUES ('"; for(i =0 ; i< nColCount-1; i++) { sSql+=resultlist.GetItemText(itemnum, i); sSql+="','"; } sSql+=resultlist.GetItemText(itemnum, nColCount-1); sSql+="')"; database.ExecuteSQL(sSql); } } // 关闭数据库 database.Close(); AfxMessageBox("Excel文件写入成功!"); } CATCH_ALL(e) { TRACE1("Excel驱动没有安装: %s",sDriver); } END_CATCH_ALL; } 
|