热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ListControl控件使用DeleteAllItems方法后再InsertItem不显示数据

如上第一第二张图所示,使用的是定时器持续读取txt文件的数据到ListControl控件中,但是清空列表框数据之后再重新读取txt文档再写入ListControl控件后,使用了DeleteAl

如上第一第二张图所示,使用的是定时器持续读取txt文件的数据到ListControl控件中,但是清空列表框数据之后再重新读取txt文档再写入List Control控件后,使用了DeleteAllItems后再InsertItem就没有数据显示 只有标号 希望有大神解答我的疑惑 谢谢!
定时器代码主要就是调用两个函数: showList(); writeInFile();

void CBoschItemDlg::OnBnClickedButton2() //触发第二个定时器 读取txt文件数据并写入数据库
{
GetDlgItemText(IDC_EDIT8, Operator);
if (Operator.IsEmpty())
{
AfxMessageBox("请输入操作人!");
}
else
{
m_List.DeleteAllItems();
SetTimer(2, 1000, NULL);
}
}

void CBoschItemDlg::showList()
{
       strCount.Format("%d", countRecord);
strCountID.Format("%d", countR);
m_List.InsertItem(countRecord, strCountID);
m_List.SetItemText(countRecord, 1, ProductID);
m_List.SetItemText(countRecord, 2, strRangeT);
m_List.SetItemText(countRecord, 3, strRangeA);
m_List.SetItemText(countRecord, 4, strnumTorque);
m_List.SetItemText(countRecord, 5, strnumAngle);
m_List.SetItemText(countRecord, 6, Result);
m_List.SetItemText(countRecord, 7, Operator);
m_List.SetItemText(countRecord, 8, m_strTime);
countRecord++;
countR++;
}

void CBoschItemDlg::writeInFile()
{
try
{
m_pRecordset->AddNew();
        m_pRecordset->PutCollect("ProductID", _variant_t(ProductID));
m_pRecordset->PutCollect("TorqueRange", _variant_t(strRangeT));
m_pRecordset->PutCollect("AngleRange", _variant_t(strRangeA));
m_pRecordset->PutCollect("TorqueValue", _variant_t(strnumTorque));
m_pRecordset->PutCollect("AngleValue", _variant_t(strnumAngle));
m_pRecordset->PutCollect("Result", _variant_t(Result));
m_pRecordset->PutCollect("Operator", _variant_t(Operator));
m_pRecordset->PutCollect("RecordTime", _variant_t(m_strTime));
m_pRecordset->Update();
}
catch (_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
}

10 个解决方案

#1


网上摘抄,解决方法如下(建议尝试一下):

m_tree.SetRedraw(FALSE);
//do erase and insert operation
m_tree.SetRedraw(TRUE);
m_tree.RedrawWindow();

都是网上搜索到的解决方案,百度排名前几,,,

http://www.cppblog.com/gracelee/archive/2006/06/16/8623.html

#2


引用 1 楼 u011280788 的回复:
网上摘抄,解决方法如下(建议尝试一下):

m_tree.SetRedraw(FALSE);
//do erase and insert operation
m_tree.SetRedraw(TRUE);
m_tree.RedrawWindow();

都是网上搜索到的解决方案,百度排名前几,,,

http://www.cppblog.com/gracelee/archive/2006/06/16/8623.html

不行呀 试过了  还是这样啊

#3


单步调试,确实你那些字符串是否为Empty

#4


引用 3 楼 jianwen0529 的回复:
单步调试,确实你那些字符串是否为Empty

嗯 字符串是不为空的 只是在显示的时候 执行了一遍DeleteAllItems()后,再InsertItem它就是没有数据 但是写入数据库是有值的 所以我觉得是deleteAllItems的问题 但是确实不知道怎么改

#5


CListCtrl::Update
BOOL Update( int nItem );

Return Value

Nonzero if successful; otherwise zero.

Parameters

nItem

Index of the item to be updated.

Remarks

Call this function to force the list view control to repaint the item specified by nItem. This function also arranges the list view control if it has the LVS_AUTOARRANGE style.

CListCtrl Overview |  Class Members |  Hierarchy Chart

See Also   CListCtrl::DrawItem

#6


void CBoschItemDlg::showList()
{
       strCount.Format("%d", countRecord);
strCountID.Format("%d", countR);
m_List.InsertItem(countRecord, strCountID);
m_List.SetItemText(countRecord, 1, ProductID);
m_List.SetItemText(countRecord, 2, strRangeT);
m_List.SetItemText(countRecord, 3, strRangeA);
m_List.SetItemText(countRecord, 4, strnumTorque);
m_List.SetItemText(countRecord, 5, strnumAngle);
m_List.SetItemText(countRecord, 6, Result);
m_List.SetItemText(countRecord, 7, Operator);
m_List.SetItemText(countRecord, 8, m_strTime);
countRecord++;  //问题就在这里啊.  你清空表格, 但这个值又没有变它
countR++;
}


正确的做法是这样.

int nCount = m_List.GetItemCount(); //插入到末尾
if(nCount>0)
{
    nCount -=1;
}
int index = m_List.InsertItem(nCount, strCountID); //得到直正的插入行位置

m_List.SetItemText(index , 1, ProductID); //设置其它列
m_List.SetItemText(index , 2, strRangeT);
m_List.SetItemText(index , 3, strRangeA);
m_List.SetItemText(index , 4, strnumTorque);
m_List.SetItemText(index , 5, strnumAngle);
m_List.SetItemText(index , 6, Result);
m_List.SetItemText(index , 7, Operator);
m_List.SetItemText(index , 8, m_strTime);

#7


一般不出数据可能是以下几种情况,
1.数据本身为空,
2.下标没有从0开始插入。
3.数据加载错了控件。。

#8


引用 6 楼 xiaohuh421 的回复:
void CBoschItemDlg::showList()
{
       strCount.Format("%d", countRecord);
strCountID.Format("%d", countR);
m_List.InsertItem(countRecord, strCountID);
m_List.SetItemText(countRecord, 1, ProductID);
m_List.SetItemText(countRecord, 2, strRangeT);
m_List.SetItemText(countRecord, 3, strRangeA);
m_List.SetItemText(countRecord, 4, strnumTorque);
m_List.SetItemText(countRecord, 5, strnumAngle);
m_List.SetItemText(countRecord, 6, Result);
m_List.SetItemText(countRecord, 7, Operator);
m_List.SetItemText(countRecord, 8, m_strTime);
countRecord++;  //问题就在这里啊.  你清空表格, 但这个值又没有变它
countR++;
}


正确的做法是这样.

int nCount = m_List.GetItemCount(); //插入到末尾
if(nCount>0)
{
    nCount -=1;
}
int index = m_List.InsertItem(nCount, strCountID); //得到直正的插入行位置

m_List.SetItemText(index , 1, ProductID); //设置其它列
m_List.SetItemText(index , 2, strRangeT);
m_List.SetItemText(index , 3, strRangeA);
m_List.SetItemText(index , 4, strnumTorque);
m_List.SetItemText(index , 5, strnumAngle);
m_List.SetItemText(index , 6, Result);
m_List.SetItemText(index , 7, Operator);
m_List.SetItemText(index , 8, m_strTime);

问题解决!可以显示数据了!谢谢你!

#9


问题已解决!谢谢大家的热心回答和帮助!谢谢!!!

#10


insertitem之前,最好先获取下count,否则行序号容易搞错,当然如果业务逻辑清楚就没有必要了,通过变量控制也可以的。

推荐阅读
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
author-avatar
繁华落尽的星空
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有