一个单视图显示内容更新的难题,关于void CBCGPGridExampleView::OnUpdate没有实时更新视图内容的问题!束手无策,请高手指教!

热爱生活 2014-06-04 10:45:02
程序是基于BCG一个demo做的,利用了BCG的一个grid控件:
在视图中使用初始化时,调用函数OnInitialUpdate()进行初始化

void CBCGPGridExampleView::OnInitialUpdate()//更新view的主要代码
{
CBCGPGridView::OnInitialUpdate();
pGridCtrl = new CAutoCompleteGridCtrl;
pGridCtrl->InsertColumn (0, _T("阶段"), 200);
pGridCtrl->InsertColumn (1, _T("时间"), 120);
pGridCtrl->InsertColumn (2, _T("地点"), 200);
}

初始化时成功的!
我需要在另一个地方更新表的内容我的方法是,获取通过概述图
pDoc=GetDocument();
pDoc->UpdateAllViews(NULL);//更新视图会调用CBCGPGridExampleVie的OnUpdate函数

CBCGPGridExampleView:OnUpdate函数的主要代码内容如下:
void CBCGPGridExampleView::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/, CObject* /*pHint*/)
{
pGridCtrl = NULL;
pGridCtrl = new CAutoCompleteGridCtrl;
pGridCtrl->InsertColumn (0, _T("阶段_更新"), 200);
pGridCtrl->InsertColumn (1, _T("时间_更新"), 120);
pGridCtrl->InsertColumn (2, _T("地点_更新"), 200);
}
//运行时,跟踪到:
pDoc=GetDocument();
pDoc->UpdateAllViews(NULL);//会进入CBCGPGridExampleView:OnUpdate函数,但是视图内容并没有更新!
视图显示内容依然最开始初始化视图显示的内容:
pGridCtrl->InsertColumn (0, _T("阶段"), 200);
pGridCtrl->InsertColumn (1, _T("时间"), 120);
pGridCtrl->InsertColumn (2, _T("地点"), 200);
实在不知如何是好!
请高手指教一下,我何去何从?!
我错在何处?!
...全文
306 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
热爱生活 2014-06-08
  • 打赏
  • 举报
回复
已解决感谢各位的指点!
热爱生活 2014-06-05
  • 打赏
  • 举报
回复
引用 1 楼 lis2012 的回复:
[quote=引用 楼主 ateng5921 的回复:] 程序是基于BCG一个demo做的,利用了BCG的一个grid控件: 在视图中使用初始化时,调用函数OnInitialUpdate()进行初始化
void CBCGPGridExampleView::OnInitialUpdate()//更新view的主要代码
{
	CBCGPGridView::OnInitialUpdate();
              pGridCtrl = new CAutoCompleteGridCtrl;
		pGridCtrl->InsertColumn (0, _T("阶段"), 200);
		pGridCtrl->InsertColumn (1, _T("时间"), 120);
		pGridCtrl->InsertColumn (2, _T("地点"), 200);
}
初始化时成功的! 我需要在另一个地方更新表的内容我的方法是,获取通过概述图 pDoc=GetDocument(); pDoc->UpdateAllViews(NULL);//更新视图会调用CBCGPGridExampleVie的OnUpdate函数 CBCGPGridExampleView:OnUpdate函数的主要代码内容如下: void CBCGPGridExampleView::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/, CObject* /*pHint*/) { pGridCtrl = NULL; pGridCtrl = new CAutoCompleteGridCtrl; pGridCtrl->InsertColumn (0, _T("阶段_更新"), 200); pGridCtrl->InsertColumn (1, _T("时间_更新"), 120); pGridCtrl->InsertColumn (2, _T("地点_更新"), 200); } //运行时,跟踪到: pDoc=GetDocument(); pDoc->UpdateAllViews(NULL);//会进入CBCGPGridExampleView:OnUpdate函数,但是视图内容并没有更新! 视图显示内容依然最开始初始化视图显示的内容: pGridCtrl->InsertColumn (0, _T("阶段"), 200); pGridCtrl->InsertColumn (1, _T("时间"), 120); pGridCtrl->InsertColumn (2, _T("地点"), 200); 实在不知如何是好! 请高手指教一下,我何去何从?! 我错在何处?!
不是你这么更新的数据的啊,对于grid的控件不需要多次new,一般更新column需要删除掉以前的column,在插入就可以了,这种方法比较原始,一般可以获取column所在的结构然后修改内容或者宽度(对其方式等等)[/quote] 谢谢您的指教!我试一下。。
热爱生活 2014-06-05
  • 打赏
  • 举报
回复
引用 2 楼 YLCN2010 的回复:
你写的代码后台数据已经更改了,只是界面没有刷新,建议增加界面刷新代码即可。
引用 4 楼 jason_wentzel 的回复:
void CBCGPGridExampleView::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/, CObject* /*pHint*/) { pGridCtrl = NULL; pGridCtrl = new CAutoCompleteGridCtrl; pGridCtrl->InsertColumn (0, _T("阶段_更新"), 200); pGridCtrl->InsertColumn (1, _T("时间_更新"), 120); pGridCtrl->InsertColumn (2, _T("地点_更新"), 200); } 这函数程序不不是只调用一次,会调用多次,你每次在这里new一个出来,每new个出来就是一个新对象,不再是原来那个对象了,这种做法有问题,你应该在初始化中new一次就可以了,在这函数中直接用pGridCtrl 就可以了
谢谢您的建议!我马上遵照您的指示,操作一下!
schlafenhamster 2014-06-04
  • 打赏
  • 举报
回复
怎么 多次 pGridCtrl = new CAutoCompleteGridCtrl; 把 pGridCtrl 放 类中, new 一次 其他地方 用 pGridCtrl 。
YLCN2010 2014-06-04
  • 打赏
  • 举报
回复
你写的代码后台数据已经更改了,只是界面没有刷新,建议增加界面刷新代码即可。
lis2012 2014-06-04
  • 打赏
  • 举报
回复
引用 楼主 ateng5921 的回复:
程序是基于BCG一个demo做的,利用了BCG的一个grid控件: 在视图中使用初始化时,调用函数OnInitialUpdate()进行初始化
void CBCGPGridExampleView::OnInitialUpdate()//更新view的主要代码
{
	CBCGPGridView::OnInitialUpdate();
              pGridCtrl = new CAutoCompleteGridCtrl;
		pGridCtrl->InsertColumn (0, _T("阶段"), 200);
		pGridCtrl->InsertColumn (1, _T("时间"), 120);
		pGridCtrl->InsertColumn (2, _T("地点"), 200);
}
初始化时成功的! 我需要在另一个地方更新表的内容我的方法是,获取通过概述图 pDoc=GetDocument(); pDoc->UpdateAllViews(NULL);//更新视图会调用CBCGPGridExampleVie的OnUpdate函数 CBCGPGridExampleView:OnUpdate函数的主要代码内容如下: void CBCGPGridExampleView::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/, CObject* /*pHint*/) { pGridCtrl = NULL; pGridCtrl = new CAutoCompleteGridCtrl; pGridCtrl->InsertColumn (0, _T("阶段_更新"), 200); pGridCtrl->InsertColumn (1, _T("时间_更新"), 120); pGridCtrl->InsertColumn (2, _T("地点_更新"), 200); } //运行时,跟踪到: pDoc=GetDocument(); pDoc->UpdateAllViews(NULL);//会进入CBCGPGridExampleView:OnUpdate函数,但是视图内容并没有更新! 视图显示内容依然最开始初始化视图显示的内容: pGridCtrl->InsertColumn (0, _T("阶段"), 200); pGridCtrl->InsertColumn (1, _T("时间"), 120); pGridCtrl->InsertColumn (2, _T("地点"), 200); 实在不知如何是好! 请高手指教一下,我何去何从?! 我错在何处?!
不是你这么更新的数据的啊,对于grid的控件不需要多次new,一般更新column需要删除掉以前的column,在插入就可以了,这种方法比较原始,一般可以获取column所在的结构然后修改内容或者宽度(对其方式等等)
孤客天涯 2014-06-04
  • 打赏
  • 举报
回复
void CBCGPGridExampleView::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/, CObject* /*pHint*/) { pGridCtrl = NULL; pGridCtrl = new CAutoCompleteGridCtrl; pGridCtrl->InsertColumn (0, _T("阶段_更新"), 200); pGridCtrl->InsertColumn (1, _T("时间_更新"), 120); pGridCtrl->InsertColumn (2, _T("地点_更新"), 200); } 这函数程序不不是只调用一次,会调用多次,你每次在这里new一个出来,每new个出来就是一个新对象,不再是原来那个对象了,这种做法有问题,你应该在初始化中new一次就可以了,在这函数中直接用pGridCtrl 就可以了

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧