我做了个基于MFC的系统,用到了树型控件和列表,现在我在树型控中已经能够实现点击左边的树中任一节点,其中数据会显示在右边的静态文本中,而我现在想要的功能是点击左边树中节点,在右边的列表控件(listctrl)会显示对应的数据.
注:其中树型控件和列表中的数据都放在数据库中,分别对应两张表:TreeItem,Device.资料和图片.网上资料我看了很多,但还是不会,
http://www.vckbase.com/document/finddoc.asp?keyword=treectrl上的例子没一个与我现在的例子相符,
而
http://topic.csdn.net/u/20070509/21/c4423785-3ce0-4507-bc0e-dc5c88ee6123.html中与我最相符,但其中4楼的话我不太明白.请大家把这部分的相应代码给我贴出来吧,本人已经被这个问题困了几天了,烦死了.....
注:其中树型控件和列表中的数据都放在数据库中,分别对应两张表:TreeItem,Device.资料和图片.网上资料我看了很多,但还是不会,
http://www.vckbase.com/document/finddoc.asp?keyword=treectrl上的例子没一个与我现在的例子相符,
而
http://topic.csdn.net/u/20070509/21/c4423785-3ce0-4507-bc0e-dc5c88ee6123.html中与我最相符,但其中4楼的话我不太明白.请大家把这部分的相应代码给我贴出来吧,本人已经被这个问题困了几天了,烦死了.....
OnDblclkTree1(NMHDR* pNMHDR, LRESULT* pResult) ,但我还是不能把它们连起来...
可能给你说中了,"在OnDblclkTree1(NMHDR* pNMHDR, LRESULT* pResult)函数中你不会把列表数据装上就得了?"
怎么做呢...
既然会用treectrl和listctrl,也会操作数据库
我不觉得还有什么难点阿
@_@
以下是我把树型控件和列表控件相结合,实现了点击树型节点中任一处,在列表控件上显示对应的信息的代码:
void CProp1::OnDblclkTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
// MessageBox(cstr); 测试cstr的内容
//cstr是全局变量,用于获取用户点击树节点中的内容
CString sSQL;
rst=cnn->Execute(L"Device",NULL,adCmdTable);// sSQL.Format("select * from Device where 课室='%s'",cstr);
/*//---------此处执行不了,不知为何------
if(cstr=="主教学楼"&&"主楼二楼"&&"主楼三楼"&&"主楼四楼"&&"主楼五楼"&&"主楼六楼"&&"主楼七楼"&&"主楼八楼"&&"主楼九楼")
{
sSQL.Format("select * from Device where Name='%s'","Name");
}*/
/*
这是我树型架构,因为我不想在节点上显示信息,所以将它们都实现了点击显示相同的内容
*/
if(cstr=="主教学楼")
sSQL.Format("select * from Device where 课室='%s'","Name");
else if(cstr=="主楼二楼")
sSQL.Format("select * from Device where 课室='%s'","Name");
else if(cstr=="主楼三楼")
sSQL.Format("select * from Device where 课室='%s'","Name");
else if(cstr=="主楼四楼")
sSQL.Format("select * from Device where 课室='%s'","Name");
else if(cstr=="主楼五楼")
sSQL.Format("select * from Device where 课室='%s'","Name");
else if(cstr=="主楼六楼")
sSQL.Format("select * from Device where 课室='%s'","Name");
else if(cstr=="主楼七楼")
sSQL.Format("select * from Device where 课室='%s'","Name");
else if(cstr=="主楼八楼")
sSQL.Format("select * from Device where 课室='%s'","Name");
else if(cstr=="主楼九楼")
sSQL.Format("select * from Device where 课室='%s'","Name"); else{ sSQL.Format("select * from Device where 课室='%s'",cstr);
}
try{
rst=cnn->Execute((_bstr_t)sSQL,NULL,adCmdText);
}
catch(...)
{
theApp.ADOError(rst);
}
if(theApp.GetRecordCount(rst)>0)
{
m_Grid.SetRecordset(rst);
}
*pResult = 0;
}
在这里要表明:我这个代码可能比较冗余,后来者可以参考,自己则适当的修改最后,在这里提问虽然没人给我一个直接的答案,但还要谢谢你们的参与.分不给你们就给系统收了,还是给你们吧..