多文挡程序的界面如下:
子窗口的左侧为数视图,右侧问datargrid控件视图
数据库的连接没问题主要代码如下void CLeftTreeView::OnInitialUpdate() 
{
CTreeView::OnInitialUpdate();

// TODO: Add your specialized code here and/or call the base class
 m_ImageSmall.Create (16, 16, TRUE, 5, 1);
HICON hIconJob = AfxGetApp()->LoadIcon(IDI_JOB);
ASSERT(hIconJob); m_ImageSmall.Add(hIconJob); HICON hIconStation = AfxGetApp()->LoadIcon(IDI_STATION);
ASSERT(hIconStation); m_ImageSmall.Add(hIconStation);    HICON hIconSub = AfxGetApp()->LoadIcon(IDI_DATA);
ASSERT(hIconSub); m_ImageSmall.Add(hIconSub);
    HICON hIconSelected = AfxGetApp()->LoadIcon(IDI_SELECTED);
ASSERT(hIconSelected); m_ImageSmall.Add(hIconSelected);
HICON hIconCal= AfxGetApp()->LoadIcon(IDI_CAL);
ASSERT(hIconCal); m_ImageSmall.Add(hIconCal);
GetTreeCtrl().SetImageList( &m_ImageSmall, TVSIL_NORMAL );
::SetWindowLong(m_hWnd,GWL_STYLE,WS_VISIBLE | WS_TABSTOP 
| WS_CHILD | WS_BORDER| TVS_HASBUTTONS 
| TVS_LINESATROOT | TVS_HASLINES
| TVS_DISABLEDRAGDROP|TVS_SHOWSELALWAYS);
HTREEITEM hTreeJob=GetTreeCtrl().InsertItem("工作", 0, 3);
HTREEITEM hTreeS1=GetTreeCtrl().InsertItem("Stn1", 1, 3,hTreeJob);
HTREEITEM hTreeDir1=GetTreeCtrl().InsertItem("定向测量", 2, 3,hTreeS1);
HTREEITEM hTreeObj1=GetTreeCtrl().InsertItem("物方测量", 2, 3,hTreeS1);
HTREEITEM hTreeS2=GetTreeCtrl().InsertItem("Stn2", 1, 3,hTreeJob);
HTREEITEM hTreeDir2=GetTreeCtrl().InsertItem("定向测量", 2, 3,hTreeS2);
HTREEITEM hTreeObj2=GetTreeCtrl().InsertItem("物方测量", 2, 3,hTreeS2);
HTREEITEM hTreeCal=GetTreeCtrl().InsertItem("解算", 4, 3,hTreeJob);
GetTreeCtrl().Expand(hTreeJob, TVE_EXPAND);
GetTreeCtrl().Expand(hTreeS1, TVE_EXPAND);
GetTreeCtrl().Expand(hTreeS2, TVE_EXPAND);
GetTreeCtrl().Expand(hTreeCal, TVE_EXPAND);
}void CLeftTreeView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here

//获得被选择项
CTreeCtrl* pCtrl = &GetTreeCtrl();
HTREEITEM hSelItem = pCtrl->GetSelectedItem();
m_hHitItem = hSelItem;
if (hSelItem==NULL)
return;
HTREEITEM hParentItem = pCtrl->GetParentItem(hSelItem);
if (hParentItem==NULL)
return;
CString strParentName = pCtrl->GetItemText(hParentItem);
CString strSelName = pCtrl->GetItemText(hSelItem);
CChildFrame* pChild=(CChildFrame*)this->GetParentFrame();
CRightFormView* pView=(CRightFormView*)pChild->m_wndSplitter.GetPane(0,1);
if (strSelName=="定向测量" && strParentName=="Stn1")
{
    pView->UpdateGridDetails("Stn1定向测量");//Stn1定向测量-数据库中一表名
}
*pResult = 0;
}
void CRightFormView::UpdateGridDetails(const CString &sTableName)
{
try 
    {
// CString str;
// str.Format("SELECT * FROM %s",sTableName);     
m_pRecordset->CursorLocation = adUseClient;
    
            m_pRecordset->Open((LPCSTR)sTableName, theApp.m_pConnection.GetInterfacePtr(), adOpenDynamic,adLockOptimistic, adCmdTable);
    }
    catch (_com_error *e)
    {
    AfxMessageBox(e->ErrorMessage());
    }

m_ctrlDataGrid.SetRefDataSource(NULL);
    m_ctrlDataGrid.SetRefDataSource( (LPUNKNOWN) m_pRecordset);
    m_ctrlDataGrid.Refresh();
    
    UpdateData(FALSE);
}

解决方案 »

  1.   

    问题是单击“Stn1”树项下的定向测量,在右侧显示不了“数据表”
      

  2.   

    主要代码void CLeftTreeView::OnInitialUpdate() 
    {
    CTreeView::OnInitialUpdate();

    // TODO: Add your specialized code here and/or call the base class
     m_ImageSmall.Create (16, 16, TRUE, 5, 1);
    HICON hIconJob = AfxGetApp()->LoadIcon(IDI_JOB);
    ASSERT(hIconJob); m_ImageSmall.Add(hIconJob); HICON hIconStation = AfxGetApp()->LoadIcon(IDI_STATION);
    ASSERT(hIconStation); m_ImageSmall.Add(hIconStation);    HICON hIconSub = AfxGetApp()->LoadIcon(IDI_DATA);
    ASSERT(hIconSub); m_ImageSmall.Add(hIconSub);
        HICON hIconSelected = AfxGetApp()->LoadIcon(IDI_SELECTED);
    ASSERT(hIconSelected); m_ImageSmall.Add(hIconSelected);
    HICON hIconCal= AfxGetApp()->LoadIcon(IDI_CAL);
    ASSERT(hIconCal); m_ImageSmall.Add(hIconCal);
    GetTreeCtrl().SetImageList( &m_ImageSmall, TVSIL_NORMAL );
    ::SetWindowLong(m_hWnd,GWL_STYLE,WS_VISIBLE | WS_TABSTOP 
    | WS_CHILD | WS_BORDER| TVS_HASBUTTONS 
    | TVS_LINESATROOT | TVS_HASLINES
    | TVS_DISABLEDRAGDROP|TVS_SHOWSELALWAYS);
    HTREEITEM hTreeJob=GetTreeCtrl().InsertItem("工作", 0, 3);
    HTREEITEM hTreeS1=GetTreeCtrl().InsertItem("Stn1", 1, 3,hTreeJob);
    HTREEITEM hTreeDir1=GetTreeCtrl().InsertItem("定向测量", 2, 3,hTreeS1);
    HTREEITEM hTreeObj1=GetTreeCtrl().InsertItem("物方测量", 2, 3,hTreeS1);
    HTREEITEM hTreeS2=GetTreeCtrl().InsertItem("Stn2", 1, 3,hTreeJob);
    HTREEITEM hTreeDir2=GetTreeCtrl().InsertItem("定向测量", 2, 3,hTreeS2);
    HTREEITEM hTreeObj2=GetTreeCtrl().InsertItem("物方测量", 2, 3,hTreeS2);
    HTREEITEM hTreeCal=GetTreeCtrl().InsertItem("解算", 4, 3,hTreeJob);
    GetTreeCtrl().Expand(hTreeJob, TVE_EXPAND);
    GetTreeCtrl().Expand(hTreeS1, TVE_EXPAND);
    GetTreeCtrl().Expand(hTreeS2, TVE_EXPAND);
    GetTreeCtrl().Expand(hTreeCal, TVE_EXPAND);
    }void CLeftTreeView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    // TODO: Add your control notification handler code here

    //获得被选择项
    CTreeCtrl* pCtrl = &GetTreeCtrl();
    HTREEITEM hSelItem = pCtrl->GetSelectedItem();
    m_hHitItem = hSelItem;
    if (hSelItem==NULL)
    return;
    HTREEITEM hParentItem = pCtrl->GetParentItem(hSelItem);
    if (hParentItem==NULL)
    return;
    CString strParentName = pCtrl->GetItemText(hParentItem);
    CString strSelName = pCtrl->GetItemText(hSelItem);
    CChildFrame* pChild=(CChildFrame*)this->GetParentFrame();
    CRightFormView* pView=(CRightFormView*)pChild->m_wndSplitter.GetPane(0,1);
    if (strSelName=="定向测量" && strParentName=="Stn1")
    {
        pView->UpdateGridDetails("Stn1定向测量");//Stn1定向测量-数据库中一表名
    }
    *pResult = 0;
    }
    void CRightFormView::UpdateGridDetails(const CString &sTableName)
    {
    try 
        {
    // CString str;
    // str.Format("SELECT * FROM %s",sTableName);     
    m_pRecordset->CursorLocation = adUseClient;
        
                m_pRecordset->Open((LPCSTR)sTableName, theApp.m_pConnection.GetInterfacePtr(), adOpenDynamic,adLockOptimistic, adCmdTable);
        }
        catch (_com_error *e)
        {
        AfxMessageBox(e->ErrorMessage());
        }

    m_ctrlDataGrid.SetRefDataSource(NULL);
        m_ctrlDataGrid.SetRefDataSource( (LPUNKNOWN) m_pRecordset);
        m_ctrlDataGrid.Refresh();
        
        UpdateData(FALSE);
    }