作者:繁华落尽的星空 | 来源:互联网 | 2023-09-16 11:12
如上第一第二张图所示,使用的是定时器持续读取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 个解决方案
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
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);
一般不出数据可能是以下几种情况,
1.数据本身为空,
2.下标没有从0开始插入。
3.数据加载错了控件。。
insertitem之前,最好先获取下count,否则行序号容易搞错,当然如果业务逻辑清楚就没有必要了,通过变量控制也可以的。