UsersListView.cpp
上传用户:yuxuan88
上传日期:2022-05-09
资源大小:2290k
文件大小:6k
源码类别:

行业应用

开发平台:

Visual C++

  1. // UsersListView.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "Inhabitants.h"
  5. #include "UsersListView.h"
  6. #include "InhabitantsDoc.h"
  7. #include "MainFrm.h"
  8. #include "House.h"
  9. #include "UserinfoView.h"
  10. #include "LeftTreeView.h"
  11. #ifdef _DEBUG
  12. #define new DEBUG_NEW
  13. #undef THIS_FILE
  14. static char THIS_FILE[] = __FILE__;
  15. #endif
  16. /////////////////////////////////////////////////////////////////////////////
  17. // CUsersListView
  18. IMPLEMENT_DYNCREATE(CUsersListView, CListView)
  19. CUsersListView::CUsersListView()
  20. {
  21. }
  22. CUsersListView::~CUsersListView()
  23. {
  24. }
  25. BEGIN_MESSAGE_MAP(CUsersListView, CListView)
  26. //{{AFX_MSG_MAP(CUsersListView)
  27. ON_WM_LBUTTONDBLCLK()
  28. ON_COMMAND(ID_OPERATE_DELETE, OnOperateDelete)
  29. ON_WM_RBUTTONDOWN()
  30. ON_UPDATE_COMMAND_UI(ID_OPERATE_DELETE, OnUpdateOperateDelete)
  31. //}}AFX_MSG_MAP
  32. END_MESSAGE_MAP()
  33. /////////////////////////////////////////////////////////////////////////////
  34. // CUsersListView drawing
  35. void CUsersListView::OnDraw(CDC* pDC)
  36. {
  37. CDocument* pDoc = GetDocument();
  38. // TODO: add draw code here
  39. }
  40. /////////////////////////////////////////////////////////////////////////////
  41. // CUsersListView diagnostics
  42. #ifdef _DEBUG
  43. void CUsersListView::AssertValid() const
  44. {
  45. CListView::AssertValid();
  46. }
  47. void CUsersListView::Dump(CDumpContext& dc) const
  48. {
  49. CListView::Dump(dc);
  50. }
  51. #endif //_DEBUG
  52. /////////////////////////////////////////////////////////////////////////////
  53. // CUsersListView message handlers
  54. void CUsersListView::SetListCtrlStyle()
  55. {
  56. DWORD dwStyle = GetWindowLong(m_hWnd, GWL_STYLE); 
  57. dwStyle &= ~(LVS_TYPEMASK);
  58. dwStyle &= ~(LVS_EDITLABELS);
  59.  
  60. // Make sure we have report view and send edit label messages.
  61.     SetWindowLong( m_hWnd, GWL_STYLE, 
  62. dwStyle | LVS_REPORT|LVS_NOLABELWRAP|LVS_SHOWSELALWAYS);
  63. // Enable the full row selection and the drag drop of headers.
  64. DWORD styles = LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES;
  65. // Use macro since this is new and not in MFC.
  66. ListView_SetExtendedListViewStyleEx(m_hWnd, styles, styles );
  67. }
  68. void CUsersListView::SetTitle()
  69. {
  70. TCHAR rgtsz[5][10] = {_T("户主"),_T("所属小区"),_T("所属楼号"),
  71. _T("所属单元"),_T("房间号")};
  72. LV_COLUMN lvcolumn;
  73. CRect rect;
  74. this->GetWindowRect(&rect);
  75. for(int i=0;i<5;i++)
  76. {
  77. lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT 
  78. | LVCF_WIDTH | LVCF_ORDER;
  79. lvcolumn.fmt = LVCFMT_LEFT;
  80. lvcolumn.pszText = rgtsz[i];
  81. lvcolumn.iSubItem = i;
  82. lvcolumn.iOrder = i;
  83. lvcolumn.cx = rect.Height()/3;
  84. GetListCtrl().InsertColumn(i, &lvcolumn);
  85. }
  86. }
  87. void CUsersListView::OnInitialUpdate() 
  88. {
  89. CListView::OnInitialUpdate();
  90. SetListCtrlStyle();
  91. SetTitle();
  92. }
  93. void CUsersListView::ShowUsers(CString strSql)
  94. {
  95. CListCtrl* p = &GetListCtrl();
  96. //清空列表
  97. p->DeleteAllItems();
  98. if(strSql == "")
  99. return;
  100. CInhabitantsDoc* pDoc = (CInhabitantsDoc*)GetDocument();
  101. CCommand<CAccessor<CHouseAccessor> > dbHouse;
  102. long* pCount = new long;
  103. //按照strSql查询符合条件的住户
  104. if(dbHouse.Open(pDoc->m_dbHouse.m_session,strSql,NULL,pCount) != S_OK)
  105. {
  106. AfxMessageBox("error");
  107. delete pCount;
  108. return;
  109. }
  110. int iItem = 0;
  111. LV_ITEM lvitem;
  112. int iActualItem = 0;
  113. //将查询得到的住户都逐个加入列表中
  114. if(dbHouse.MoveFirst() == S_OK)
  115. {
  116. do
  117. {
  118. for(int iSubItem=0;iSubItem<5;iSubItem++)
  119. {
  120. lvitem.mask = LVIF_TEXT|(iSubItem == 0? LVIF_IMAGE : 0);
  121. lvitem.iItem = (iSubItem == 0)? iItem : iActualItem;
  122. lvitem.iSubItem = iSubItem;
  123. lvitem.iImage = (iItem%2)?0:2;
  124. CString str = "";
  125. switch(iSubItem)
  126. {
  127. case 0://户主
  128. str = dbHouse.m_housemaster;
  129. lvitem.pszText =(LPTSTR)(LPCTSTR)str;
  130. break;
  131. case 1://小区名
  132. {
  133. str = dbHouse.m_sectionname;
  134. lvitem.pszText = (LPTSTR)(LPCTSTR) str;
  135. break; 
  136. }
  137. case 2://楼号
  138. {
  139. str.Format("%d",dbHouse.m_buildingnum);
  140. lvitem.pszText = (LPTSTR)(LPCTSTR) str;
  141. break;
  142. }
  143. case 3://单元号
  144. {
  145. str.Format("%d",dbHouse.m_cellnum);
  146. lvitem.pszText = (LPTSTR)(LPCTSTR)str;
  147. break;
  148. }
  149. case 4://房间号
  150. {
  151. str.Format("%d",dbHouse.m_roomnum);
  152. lvitem.pszText = (LPTSTR)(LPCTSTR)str;
  153. }
  154. if (iSubItem == 0)
  155. iActualItem = GetListCtrl().InsertItem(&lvitem);
  156. else
  157. GetListCtrl().SetItem(&lvitem);
  158. }
  159. iItem ++;
  160. }
  161. while( dbHouse.MoveNext() == S_OK );
  162. }
  163. dbHouse.Close();
  164. }
  165. void CUsersListView::OnLButtonDblClk(UINT nFlags, CPoint point) 
  166. {
  167. CListView::OnLButtonDblClk(nFlags, point);
  168. //获得双击的项
  169. CListCtrl* pCtrl = &GetListCtrl();
  170. int nHitItem = pCtrl->HitTest(point,NULL);
  171. if( nHitItem < 0 )
  172. return;
  173. CString strSectionName = pCtrl->GetItemText(nHitItem,1);
  174. CString strBuildingNum = pCtrl->GetItemText(nHitItem,2);
  175. CString strCellNum = pCtrl->GetItemText(nHitItem,3);
  176. CString strRoomNum = pCtrl->GetItemText(nHitItem,4);
  177. CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
  178. CInhabitantsDoc* pDoc = (CInhabitantsDoc*)GetDocument();
  179. pFrame->SwitchToView(USERINFOVIEW);
  180. pFrame->m_pUserinfoView->UpdateUserInfo(strSectionName,atoi(strBuildingNum.GetBuffer(0)),
  181. atoi(strCellNum.GetBuffer(0)),atoi(strRoomNum.GetBuffer(0)));
  182. }
  183. void CUsersListView::OnOperateDelete() 
  184. {
  185. CListCtrl* pCtrl = &GetListCtrl();
  186. POSITION pos = pCtrl->GetFirstSelectedItemPosition();
  187. if( pos == NULL )
  188. {
  189. AfxMessageBox("请选择要删除的住户");
  190. return;
  191. }
  192. if(this->MessageBox("你真的要删除选择的所有住户吗?",
  193. "小区居民管理系统",MB_YESNO)==IDNO)
  194. return;
  195. //删除选择的所有住户
  196. while (pos)
  197. {
  198. int nHitItem = pCtrl->GetNextSelectedItem(pos);
  199. CString strSectionName = pCtrl->GetItemText(nHitItem,1);
  200. CString strBuildingNum = pCtrl->GetItemText(nHitItem,2);
  201. CString strCellNum = pCtrl->GetItemText(nHitItem,3);
  202. CString strRoomNum = pCtrl->GetItemText(nHitItem,4);
  203. CString strSql;
  204. strSql.Format("delete * from house where sectionname = '%s' and buildingnum = %s and cellnum = %s and roomnum = %s",
  205. strSectionName,strBuildingNum,strCellNum,strRoomNum);
  206. CInhabitantsDoc* pDoc = (CInhabitantsDoc*)GetDocument();
  207. pDoc->DeleteUser(strSql);
  208. }
  209. CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
  210. pFrame->m_pLeftView->AddUsersToTree();
  211. }
  212. void CUsersListView::OnUpdateOperateDelete(CCmdUI* pCmdUI) 
  213. {
  214. pCmdUI->Enable(GetListCtrl().GetFirstSelectedItemPosition() != NULL);
  215. }