我的问题是:
  我的视图类CMyView是从CFormView派生的,其中有一CListCtrl控件m_list,视图类中包含一个函数叫OnListall(),其作用是将数据库中的数据显示在m_list控件中。在此基础上,我生成了一个对话框类用于显示每条记录,并能更新数据库中相应记录。问题是在更新数据库记录后,我通过视图类指针调用OnListall()函数,希望视图类中m_list中的数据也能相应更新,但是没有成功,m_list中的数据没有进行相应的更新。
    在进行数据更新后,我在对话框中调用的函数是这样的:
  //更新数据列表控件
    CMyView *m_pView=(CMyView *)((CMainFrame *)GetParent())->GetActiveView();
    m_pView->OnListall();请问高手:这样调用有问题吗?应该怎么更正呢?   

解决方案 »

  1.   

    问题不一定在更新函数阿在OnListall中是如何获取数据库数据的要确保更新后OnListall读取的是更新的数据
      

  2.   

    是这样的:
    OnListall()是视图中的一个函数,它的作用是重新在控件中显示全部数据。这个函数同样也和菜单与工具栏相关联,即可以通过菜单项和工具栏中相应的菜单和按钮执行的。问题出在:
    如果更新数据后,单击相应菜单,则控件数据就能立即更新。
    而如果在对话框中调用下面语句:
    //更新数据列表控件
    CMyView *m_pView=(CMyView *)((CMainFrame *)GetParent())->GetActiveView();
    m_pView->OnListall();就得不到相应的更新效果!我是百思不得其解!我到底错在哪?
      

  3.   

    光凭这几句代码,很难看出有什么问题,你调试一下,看看执行了CMyView *m_pView=(CMyView *)((CMainFrame *)GetParent())->GetActiveView();这一句后,m_pView有值吗?还有就是跟踪到m_pView->OnListall();这个函数里面去看看到底是一个什么样的操作,找出问题就好解决了.
    另外,在窗口上只一个视图还是有多个视图,如果有多个视图的话,GetActiveView()就不一定能指的是你想要的视图了.
    祝你好运了,呵呵
      

  4.   

    先检查一下看是否取到正确的view的指针m_pView
      

  5.   

    你在对话框中操作数据库时,数据是否已经更新重数据库中了要确保你的view 中的数据源和你对话框中的数据源要同步!
      

  6.   

    CMyView *m_pView=(CMyView *)((CMainFrame *)GetParent())->GetActiveView();有问题
    建议采用遍历的方式获得视图指针
    遍历的代码如下
    POSITION pos; pos=theApp.pDocTemplate->GetFirstDocPosition();
    CGraphBrowseDoc *pDoc=(CGraphBrowseDoc *)theApp.pDocTemplate->GetNextDoc(pos); 
    pos=pDoc->GetFirstViewPosition();
    pView=(CGraphBrowseView *)pDoc->GetNextView(pos);
      

  7.   

    问题是:我的m_pView有值,也是指向视图。
    比较怪的是,我在单步调试的时候没问题,能正常显示更新后的数据,但如果不是在单步调试时就不行,无论是在debug还是在release下,数据显示还是原来的,就好像没有刷新一样?憋闷死我了!
      

  8.   

    在OnListAll里面加log或者添加MessageBox  看看是否进入了该函数?然后再决定是cnwolf(独狼) 所说的数据库问题还是mousefj(冯杰) 所说的问题,或者别的问题。不要着急,慢慢缩小范围。