设为首页 加入收藏

TOP

3.8.1 设计员工模块(3)
2013-10-07 14:27:55 来源: 作者: 【 】 浏览:56
Tags:3.8.1 设计 员工 模块

3.8.1  设计员工模块(3)

(2) 双击对话框,创建一个新类CEmpInfoManageDlg,在头文件中定义变量及成员函数。头文件中相应的代码如下:

  1. class CEmpInfoManageDlg : public CDialog    
  2.  {    
  3.  public:    
  4.      CEmpInfoManageDlg(CWnd* pParent = NULL);    
  5.      HTREEITEM m_hParent;                          
    //定义树形控件的句柄    
  6.      HTREEITEM m_hSelect;    
  7.      _RecordsetPtr m_pRecordset;                     //定义记录集    
  8.      _RecordsetPtr m_pRecordset1;    
  9.      void ShowTreeData();                         
    //显示树形控件的数据    
  10.      void ShowListData(const CString& sql);      
    //显示列表控件的数据    
  11.      int m_nSelect;    
  12.      int m_nID;    
  13.  }  

通过上述代码为相关变量和成员函数定义,m_hParent与m_hSelect为属性控件的句柄,函数ShowTreeData( )与 ShowListData( )分别为将数据显示在树形控件和列表控件中。

(3) 通过类向导为控件添加相应的变量。并为对话框添加WM_INITDIALOG消息响应函数。OnInitDialog( )中的代码如下:

  1. BOOL CEmpInfoManageDlg::OnInitDialog()    
  2. {    
  3.     CDialog::OnInitDialog();    
  4.     m_pRecordset.CreateInstance("ADODB.Recordset");    
  5.     m_pRecordset1.CreateInstance("ADODB.Recordset"); 
    //风格设定    
  6.     m_ListCrtl.SetExtendedStyle(LVS_EX_GRIDLINES | 
    LVS_EX_FULLROWSELECT );    
  7.     m_ListCrtl.InsertColumn(0, "ID", LVCFMT_CENTER, 
    40);       //插入列标题    
  8.     m_ListCrtl.InsertColumn(1, "员工名称", LVCFMT_CENTER, 60);    
  9.     m_ListCrtl.InsertColumn(2, "年龄", LVCFMT_CENTER, 40);    
  10.     m_ListCrtl.InsertColumn(3, "性别", LVCFMT_CENTER, 40);    
  11.     m_ListCrtl.InsertColumn(4, "籍贯", LVCFMT_CENTER, 120);    
  12.     m_ListCrtl.InsertColumn(5, "部门", LVCFMT_CENTER, 120);    
  13.     m_ListCrtl.InsertColumn(6, "出生日期", LVCFMT_CENTER, 100);    
  14.     m_ListCrtl.InsertColumn(7, "电话", LVCFMT_CENTER, 80);    
  15.     m_ListCrtl.InsertColumn(8, "备注", LVCFMT_CENTER, 200);    
  16.     ShowTreeData();                                
    //显示数据    
  17.     return TRUE;    
  18. }  

通过上述代码完成了一些初始化工作,函数SetExtendedStyle( )设置列表控件的风格,通过InsertColumn( )函数可以设置列表控件的列标题,包括标题的位置和列的宽度。

(4) 通过类向导为树形控件添加NM_DBLCLK消息响应函数。主要功能是通过双击树形控件,在列表控件中显示相应的数据,OnDblclkTree1中的代码如下:

  1. void CEmpInfoManageDlg::OnDblclkTree1(NMHDR* 
    pNMHDR, LRESULT* pResult)    
  2.   {    
  3.    _variant_t va;    
  4.    CString strSQL;    
  5.    HTREEITEM hSelect;    
  6.    hSelect = m_TreeCrtl.GetSelectedItem();     
    //获取选中节点的索引    
  7.    CString strName;    
  8.    if(hSelect != m_hParent)                       
    //判断是否为根节点    
  9.    {    
  10.           strName = m_TreeCrtl.GetItemText(hSelect);  
    //获取选中节点的文本    
  11.           if(m_TreeCrtl.GetParentItem(hSelect) == m_hParent)   
  12.           //判断是否为子节点    
  13.           {    
  14.               strSQL.Format("select * from emp where 
    depart = '%s'", strName);    
  15.           }    
  16.           else   
  17.               strSQL.Format("select * from emp where 
    name = '%s'", strName);    
  18.           ShowListData(strSQL);                   
    //显示数据    
  19.       }    
  20.       *pResult = 0;    
  21.   }  

因为树形控件中显示的信息包括员工的单位、部门和员工的信息三种,而员工的信息和部门的信息是分别放在数据库中的两个不同的表中。在这里通过单击节点的父节点就可以判断要查询的是哪一张表,从而构造不同的SQL语句来查询员工或者部门的信息。

(5) 通过类向导为列表控件添加LVN_ITEMCHANGED消息响应函数。OnItemchangedList1中的代码如下:

  1. void CEmpInfoManageDlg::OnItemchangedList1(NMHDR*
    pNMHDR, LRESULT* pResult)    
  2.  {    
  3.   NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;    
  4.   int nSelect = pNMListView->iItem;            
    //获取选定的行号    
  5.   theApp.m_strEmpID = m_ListCrtl.GetItemText
    (nSelect,0);  //获取选定的文本    
  6.   *pResult = 0;    
  7.  }  

(6) 设置索引,当前单击列表控件行的索引是pNMListView->iItem,该索引是从0开始的,这样可通过GetItemText()函数获取指定行列的字符串。自定义成员函数ShowTreeData()用来显示树形控件的数据,代码如下:

  1. void CEmpInfoManageDlg::ShowTreeData()    
  2.  {    
  3.   m_TreeCrtl.DeleteAllItems();               
    //删除所有的子项    
  4.   HTREEITEM hItem;                            
    //定义句柄    
  5.   TVINSERTSTRUCT tvInsert;                     
    //定义结构体    
  6.   tvInsert.hParent = NULL;    
  7.   tvInsert.hInsertAfter = NULL;    
  8.   tvInsert.item.mask = TVIF_TEXT;    
  9.   tvInsert.item.pszText = _T("某单位");             
    //根节点的赋值    
  10.      m_hParent = m_TreeCrtl.InsertItem(&tvInsert);  
    //插入根节点    
  11.      _variant_t vName;    
  12.      CString strSQL;                             
    //定义字符串变量    
  13.      strSQL.Format("select [name] from dep");    
  14.      try    
  15.      {    
  16.          m_pRecordset = theApp.m_pConnection->Execute((_bstr_t)  
  17.      strSQL, NULL, adCmdText);    
  18.          while(!m_pRecordset->adoEOF)         
    //如果记录没有到末尾    
  19.          {    
  20.              vName = m_pRecordset->GetCollect
    (_variant_t((long)0));    
  21.              //获取记录集第一列值    
  22.              hItem = m_TreeCrtl.InsertItem((char*)
    _bstr_t(vName), m_hParent);    
  23.              strSQL.Format("select name from emp");    
  24.              m_pRecordset1=theApp.m_pConnection->    
  25.                  Execute((_bstr_t)strSQL,NULL,adCmdText); 
    //执行SQL语句    
  26.              while(!m_pRecordset1->adoEOF)             
    //如果记录没有到末尾    
  27.              {    
  28.                  vName = m_pRecordset1->GetCollect
    (_variant_t((long)0));    
  29.                  m_TreeCrtl.InsertItem((char*)_bstr_t(vName), hItem);    
  30.                  m_pRecordset1->MoveNext();    
  31.              }    
  32.              m_pRecordset->MoveNext();    
  33.          }    
  34.          m_TreeCrtl.Expand(m_hParent,TVE_EXPAND);    
    //展开根节点    
  35.      }    
  36.      CATCH_ERROR;    
  37.  }  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.8.1 设计员工模块(4) 下一篇3.8.1 设计员工模块(2)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: