五、实现主从表的显示
由于我假设不知道数据库中有多少字段,字段名都是不知道的。所有都动态生成。所以首先要检索主键。把主键检索出来以后,然后得到列表当前选择行的对应于主键列的数据。然后以这些主键列的值当作检索条件检索从表的数据(从表的主键一定多于主表)最后将结果显示出来。看起来过程也挺简单的,如果用dotnet中DataGrid做的话,太简单了是吧,但VC操作起来,就有点麻烦了。就拿从列表取当前选择行的主键列的数据的话,和dotnet一比,就知道VC麻烦在哪儿了。(不过我还是比较喜欢VC,嘿嘿)。一个DataGrid,如果我知道了列名,又茯取了当前行的行号(CurrentRowIndex)。
如果你后台是直接绑定的一个DataTable,就可以直接取得这个值:myTable.Rows[CurrnetRowIndex][“pkey1”].ToString(); 当然如果你后面不是直接绑定一个DataTable,而是一个结果经过虑后的结果,那么可能会稍烦琐一点。这里不对这种情况进行计讨论。下面看一下VC下是怎么处里的,(如果有更好的方法,请通知我,先谢了)
int CDagView::GetColumnIndex(CListCtrl &ref,LPCTSTR strCol) { CHeaderCtrl * pHeader=ref.GetHeaderCtrl(); int nCount=pHeader->GetItemCount(); TCHAR lpBuffer[256]; bool fFound = false; HDITEM hdi; hdi.mask = HDI_TEXT; hdi.pszText = lpBuffer; hdi.cchTextMax = 256; int index=-1; for (int i=0;!fFound && (i < nCount);i++) { pHeader->GetItem(i, &hdi);
if (strcmp(hdi.pszText, strCol) == 0) { index=i; fFound = true; } } return index; } iSubItem=GetColumnIndex(refListCtrl); CString strValue=refListCtrl.GetItemText(iCurrent,iSubItem); |
先取得列号然后取得行号,最后取这个值......好了,就写这么多吧,具体细节再看代码。
六、结束语
其实这个程式比较简单,在Windows 2k下调试通过!就写到这里吧,不足之处,见谅!有时候,再好的技术,如果缺乏有效的示例,也会变得晦涩难懂。像本文中的列表、树形控件参数很多,使用VC++(www.cppentry.com)虽然说可以发挥出他们最强劲的功能,但是有一部分参数,在MSDN中只是简要介绍,没有详细的示例说明(我猜:微软内部肯定有更加详细的示例及文档,或者说叫引擎,不对外公布)这就要靠广大程序员的努力探索了,知识共享,大家共同进步。
|