MFC树控件与列表视图控件的响应和数据库记录在列表视图的显示
2018-01-14 17:24
597 查看
voidCLostAndFoundView::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW*pNMTreeView = (NM_TREEVIEW*)pNMHDR;
//TODO: Add your control notification handler code here
HTREEITEM selItem =m_treeInfo.GetSelectedItem();
if(selItem== m_treeInfo.GetRootItem())
return;
DWORDm = m_treeInfo.GetItemData(selItem);
CStringstrSQL(_T("select [物品名称],[物品数量],[发现人],[登记时间] from [用户及物品信息表] where 物品种类='0'"));
CStringstrSQL2(_T("select [物品名称],[物品数量],[发现人],[登记时间] from [用户及物品信息表] where 物品种类='1'"));
CStringstrSQL3(_T("select [物品名称],[物品数量],[发现人],[登记时间] from [用户及物品信息表] where 物品种类='2'"));
CStringstrSQL4(_T("select [物品名称],[物品数量],[发现人],[登记时间] from [用户及物品信息表] where 物品种类='3'"));
switch(m)
{
case0:
m_listInfo.DeleteAllItems();
while(m_listInfo.DeleteColumn(0));
UpdateWindow();
if(!ShowInformation(strSQL))
AfxMessageBox("数据获取失败!");
break;
case1:
m_listInfo.DeleteAllItems();
while(m_listInfo.DeleteColumn(0));
UpdateWindow();
if(!ShowInformation(strSQL2))
AfxMessageBox("数据获取失败!");
break;
case2:
m_listInfo.DeleteAllItems();
while(m_listInfo.DeleteColumn(0));
UpdateWindow();
if(!ShowInformation(strSQL3))
AfxMessageBox("数据获取失败!");
break;
case3:
m_listInfo.DeleteAllItems();
while(m_listInfo.DeleteColumn(0));
UpdateWindow();
if(!ShowInformation(strSQL4))
AfxMessageBox("数据获取失败!");
break;
}
*pResult= 0;
}
当点击树的不同结点时会执行OnSelectedTree()函数,单击树控件的分组结点时执行OnSelectedTree()函数。为不同的结点绑定不同的标记数据,依据不同的绑定数据进入不同的case分支,将相应的SQL语句传入ShowInformation()函数。
BOOLCLostAndFoundView::ShowInformation(CString strSQL)
{
try{
BeginWaitCursor();
if(m_pSet->IsOpen())
m_pSet->Close();m_pSet->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
if(m_pSet->IsEOF())
{
m_pSet->MoveLast();
m_pSet->MoveFirst();
}
//获取结果集字段个数
intnFieldCount = m_pSet->GetODBCFieldCount();
CODBCFieldInfofieldinfo;
for(int n = 0;n < nFieldCount;n++)
{
m_pSet->GetODBCFieldInfo(n,fieldinfo);
intnWidth = m_listInfo.GetStringWidth(fieldinfo.m_strName) + 40;
m_listInfo.InsertColumn(n,fieldinfo.m_strName,LVCFMT_CENTER,nWidth);
m_listInfo.SetExtendedStyle(LVS_EX_HEADERDRAGDROP);
}//endfor
//读取记录信息
CStringstrValue;
m_pSet->MoveFirst();
intnCount = 0;
while(!m_pSet->IsEOF())
{
m_listInfo.InsertItem(nCount,strValue);
for(intj=0;j<nFieldCount;j++)
{
m_pSet->GetFieldValue(j,strValue);
m_listInfo.SetItemText(nCount,j, strValue);
}
m_pSet->MoveNext();
nCount++;
}//end while
EndWaitCursor();
}//end try
catch(CDBException*e){
e->ReportError();
EndWaitCursor();
returnFALSE;
}
returnTRUE;
}
先判断记录集是否处于打开状态,如果为真则关闭。m_pSet->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL),第一个参数表明使用该参数的默认参数,为CRecordset::dynaset,以动态集的形式打开数据库,strSQL是打开数据库时要执行的SQL语句,该语句用where控制条件从表中查询四个字段。打开后将记录定位到第一条记录上。m_listInfo.SetExtendedStyle(LVS_EX_HEADERDRAGDROP)设置列表视图的列的宽度是可以通过拖动来调整的。在这里其实不用try{}catch{}也是可以的,因为本人对于异常处理这一块学的不是很透彻,catch了之后也没有给出解决方法,除了不让程序崩溃之外并没有解决什么实际问题。
{
NM_TREEVIEW*pNMTreeView = (NM_TREEVIEW*)pNMHDR;
//TODO: Add your control notification handler code here
HTREEITEM selItem =m_treeInfo.GetSelectedItem();
if(selItem== m_treeInfo.GetRootItem())
return;
DWORDm = m_treeInfo.GetItemData(selItem);
CStringstrSQL(_T("select [物品名称],[物品数量],[发现人],[登记时间] from [用户及物品信息表] where 物品种类='0'"));
CStringstrSQL2(_T("select [物品名称],[物品数量],[发现人],[登记时间] from [用户及物品信息表] where 物品种类='1'"));
CStringstrSQL3(_T("select [物品名称],[物品数量],[发现人],[登记时间] from [用户及物品信息表] where 物品种类='2'"));
CStringstrSQL4(_T("select [物品名称],[物品数量],[发现人],[登记时间] from [用户及物品信息表] where 物品种类='3'"));
switch(m)
{
case0:
m_listInfo.DeleteAllItems();
while(m_listInfo.DeleteColumn(0));
UpdateWindow();
if(!ShowInformation(strSQL))
AfxMessageBox("数据获取失败!");
break;
case1:
m_listInfo.DeleteAllItems();
while(m_listInfo.DeleteColumn(0));
UpdateWindow();
if(!ShowInformation(strSQL2))
AfxMessageBox("数据获取失败!");
break;
case2:
m_listInfo.DeleteAllItems();
while(m_listInfo.DeleteColumn(0));
UpdateWindow();
if(!ShowInformation(strSQL3))
AfxMessageBox("数据获取失败!");
break;
case3:
m_listInfo.DeleteAllItems();
while(m_listInfo.DeleteColumn(0));
UpdateWindow();
if(!ShowInformation(strSQL4))
AfxMessageBox("数据获取失败!");
break;
}
*pResult= 0;
}
当点击树的不同结点时会执行OnSelectedTree()函数,单击树控件的分组结点时执行OnSelectedTree()函数。为不同的结点绑定不同的标记数据,依据不同的绑定数据进入不同的case分支,将相应的SQL语句传入ShowInformation()函数。
BOOLCLostAndFoundView::ShowInformation(CString strSQL)
{
try{
BeginWaitCursor();
if(m_pSet->IsOpen())
m_pSet->Close();m_pSet->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
if(m_pSet->IsEOF())
{
m_pSet->MoveLast();
m_pSet->MoveFirst();
}
//获取结果集字段个数
intnFieldCount = m_pSet->GetODBCFieldCount();
CODBCFieldInfofieldinfo;
for(int n = 0;n < nFieldCount;n++)
{
m_pSet->GetODBCFieldInfo(n,fieldinfo);
intnWidth = m_listInfo.GetStringWidth(fieldinfo.m_strName) + 40;
m_listInfo.InsertColumn(n,fieldinfo.m_strName,LVCFMT_CENTER,nWidth);
m_listInfo.SetExtendedStyle(LVS_EX_HEADERDRAGDROP);
}//endfor
//读取记录信息
CStringstrValue;
m_pSet->MoveFirst();
intnCount = 0;
while(!m_pSet->IsEOF())
{
m_listInfo.InsertItem(nCount,strValue);
for(intj=0;j<nFieldCount;j++)
{
m_pSet->GetFieldValue(j,strValue);
m_listInfo.SetItemText(nCount,j, strValue);
}
m_pSet->MoveNext();
nCount++;
}//end while
EndWaitCursor();
}//end try
catch(CDBException*e){
e->ReportError();
EndWaitCursor();
returnFALSE;
}
returnTRUE;
}
先判断记录集是否处于打开状态,如果为真则关闭。m_pSet->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL),第一个参数表明使用该参数的默认参数,为CRecordset::dynaset,以动态集的形式打开数据库,strSQL是打开数据库时要执行的SQL语句,该语句用where控制条件从表中查询四个字段。打开后将记录定位到第一条记录上。m_listInfo.SetExtendedStyle(LVS_EX_HEADERDRAGDROP)设置列表视图的列的宽度是可以通过拖动来调整的。在这里其实不用try{}catch{}也是可以的,因为本人对于异常处理这一块学的不是很透彻,catch了之后也没有给出解决方法,除了不让程序崩溃之外并没有解决什么实际问题。
相关文章推荐
- VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)
- MFC编程入门之二十八(常用控件:列表视图控件List Control上)
- VC++下借助DBGird控件显示数据库记录
- VS2013/MFC编程入门之二十七(常用控件:列表视图控件List Control 上)
- VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)
- MFC中的列表视图控件CListCtrl(转)
- MFC List Control控件添加单元格编辑和单元格下拉列表项以适用于数据库相关操作
- MFC之列表视图控件List Control
- MFC 列表视图控件List Control 使用一
- VC MFC 视图中控件响应CTRL+C等消息
- VS2010/MFC编程初识一【ListControl列表视图控件和SliderControl滑块控件的 基本用法】
- VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)
- VC++使用列表控件显示数据库中的数据(移动记录集指针遍历记录集)
- mfc 数据库显示到editcontrol控件问题
- VC MFC列表视图(CListCtrl)控件
- MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应
- VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上)
- 【VS开发】MFC CListCtrl列表控件的消息响应
- mfc 列表控件和richedit控件一直显示新加入的行
- VS2010中新控件的编程------MFC下的多列表视图