wxWidgets中ListCtrl中的item数据遍历

在Ubuntu上安装,我现在比较喜欢用sudo apt-get install,简单。如果实在想手工干,当然下源码。
wxWidgets安装比较简单:

sudo apt-get install libwxbase2.8-dev wx2.8-i18n wx2.8-headers wx2.8-examples python-wxgtk2.8

需要安装的还有:
libwxgtk2.8-dev
libwxgtk2.8-dbg
wx-common

wxWidgets Examples安装目录是:/usr/share/doc/wx2.8-examples/

编译ListCtrl例子,需要将几个.gz解开即可。为了遍历数据,需要如下代码:
[sourcecode language=”c++”]
// 数据列表在此导出
int ItemCount, ColumnCount;
wxListItem Item;
wxString itemInfo;

ColumnCount = m_listCtrl->GetColumnCount();
ItemCount = m_listCtrl->GetItemCount();

Item.m_itemId = -1; //这个指出第一行,就是标题行
Item.m_mask = wxLIST_MASK_TEXT;
for(int i=0; iGetColumn(i, Item);

itemInfo += wxT(“>>”) + Item.m_text;
}
itemInfo += wxT(“\n”); //

for(int i=0; iGetItem(Item);

itemInfo += wxT(“==”) + Item.m_text;
}
itemInfo += wxT(“\n”);
}
[/sourcecode]

注:
解压缩.gz文件 gunzip .gz

参考:
1. linux和unix下常用解压和压缩命令

打赏

《wxWidgets中ListCtrl中的item数据遍历》有10个想法

  1. 非常感谢大哥解决了我头疼了好几天的问题,衷心感谢!

  2. [sourcecode language=”c++”]
    void DBDialog::InsertDB(wxString strBugType,wxString strCheckItem,int nCheckResult,int nErrorNum,wxString strErrorPercent)
    {

    wxDbConnectInf *DbConnectInf = NULL; // 定义数据库连接信息指针DB connection information
    wxDb *Conn = NULL; // 定义数据库连接指针Database connection
    wxDbTable *table = NULL; // 定义数据表指针Data table to mysql

    DbConnectInf = new wxDbConnectInf(0, wxT(“”), wxT(“”), wxT(“”));//这里定义的内容基本没用,但不定义会报错

    Conn = new wxDb(DbConnectInf->GetHenv());

    bool DBfailOnDataTypeUnsupported=!true;//

    if(!Conn->Open(wxT(“driver={mysql odbc 5.1 driver};server=192.168.100.13;DSN=icdata_db;charset=gb2312;database=icdata_db;uid=root;pwd=duangexin;port=3306;”),DBfailOnDataTypeUnsupported))//使用驱动程序的方式打开数据库
    {
    wxMessageBox(“不能建立连接”,”DB CONNECTION ERROR”, wxOK | wxICON_EXCLAMATION);
    }

    table = new wxDbTable(Conn, wxT(“ictable”),10,wxT(“”),!wxDB_QUERY_ONLY, wxT(“”));

    //定义保存列内容的变量
    wxString sst;
    wxChar ChipNumbers[100];
    wxChar ChipCounts[100];
    wxChar ChipTypes[100];
    wxChar InspectorNumbers[100];
    wxChar CheckTimes[100];
    wxChar BugTypes[100];
    wxChar CheckItems[100];
    wxChar CheckResults[100];
    wxChar ErrorCounts[100];
    wxChar ErrorPercents[100];

    //有几列就定义几列
    table->SetColDefs(0, wxT(“ChipNumber”), DB_DATA_TYPE_VARCHAR,ChipNumbers, SQL_C_WXCHAR, sizeof(ChipNumbers), true, true);
    table->SetColDefs(1, wxT(“ChipCount”), DB_DATA_TYPE_VARCHAR, ChipCounts,SQL_C_WXCHAR, sizeof(ChipCounts), true, true);
    table->SetColDefs(2,wxT(“ChipType”),DB_DATA_TYPE_VARCHAR,ChipTypes,SQL_C_WXCHAR,sizeof(ChipTypes),true,true);
    table->SetColDefs(3, wxT(“InspectorNumber”), DB_DATA_TYPE_VARCHAR,InspectorNumbers, SQL_C_WXCHAR, sizeof(InspectorNumbers), true, true);
    table->SetColDefs(4, wxT(“CheckTime”), DB_DATA_TYPE_VARCHAR, CheckTimes,SQL_C_WXCHAR, sizeof(CheckTimes), true, true);
    table->SetColDefs(5,wxT(“BugType”),DB_DATA_TYPE_VARCHAR,BugTypes,SQL_C_WXCHAR,sizeof(BugTypes),true,true);
    table->SetColDefs(6, wxT(“CheckItem”), DB_DATA_TYPE_VARCHAR,CheckItems, SQL_C_WXCHAR, sizeof(CheckItems), true, true);
    table->SetColDefs(7, wxT(“CheckResult”), DB_DATA_TYPE_VARCHAR, CheckResults,SQL_C_WXCHAR, sizeof(CheckResults), true, true);
    table->SetColDefs(8,wxT(“ErrorCount”),DB_DATA_TYPE_VARCHAR,ErrorCounts,SQL_C_WXCHAR,sizeof(ErrorCounts),true,true);
    table->SetColDefs(9, wxT(“ErrorPercent”), DB_DATA_TYPE_VARCHAR,ErrorPercents, SQL_C_WXCHAR, sizeof(ErrorPercents), true, true);

    //打开DbTable对象
    if( !table->Open())
    {
    wxMessageBox(“不能打开数据库结构表!”);
    return;
    }

    //获取当天操作时间
    wxDateTime now = wxDateTime::Now();
    wxString strDate = now.Format(wxT(“%Y-%m-%d”));

    //添加新记录
    IntToChar(ChipNumbers,g_DBPara.nCheckerNum);//ChipNumbers所绑定的字段将添加一条记录
    IntToChar(ChipCounts,g_DBPara.nChipBatch);
    wxStrcpy(ChipTypes,g_DBPara.strChipType);
    IntToChar(InspectorNumbers,g_DBPara.nCheckerNum);
    wxStrcpy(CheckTimes,strDate);

    wxStrcpy(BugTypes,strBugType);
    wxStrcpy(CheckItems,strCheckItem);
    IntToChar(CheckResults,nCheckResult);
    IntToChar(ErrorCounts,nErrorNum);
    wxStrcpy(ErrorPercents,strErrorPercent);

    /*********************************************************************************

    其他同理,注意wxChar的字段不能用=赋值,只能用wxStrcpy。int、long等这些类字段可以

    直接=赋值/

    *********************************************************************************/

    if(!table->Insert())

    {

    //判断添加是否成功
    wxMessageBox(“添加失败!”);
    return;

    }

    //提交更新数据库

    table->GetDb()->CommitTrans();

    //关闭DbTable对象
    if(table)
    {
    wxDELETE(table);
    table = 0;
    }

    //关闭连接
    if(Conn)
    {
    wxDbFreeConnection(Conn);
    Conn = 0;
    wxDbCloseConnections();
    }

    //释放环境
    DbConnectInf->FreeHenv();
    }
    [/sourcecode]
    老师 这个是我插入函数,可能跟你指导的有点出入,请问怎么修改?

  3. wxDbTable *table = NULL; // 定义数据表指针Data table to mysql

    table不是wxListCtrl,你向table中插入的数据要手动通过wxListItem插入到wxListCtrl中才可以啊。虽然不用主动去刷新,但是要写到wxListCtrl中才会显示出来。

  4. 看以下两段代码:
    [sourcecode language=”c++”]
    wxListItem itemCol;
    itemCol.SetText(_T(“Column 1”));
    itemCol.SetImage(-1);
    m_listCtrl->InsertColumn(0, itemCol);

    itemCol.SetText(_T(“Column 2”));
    itemCol.SetAlign(wxLIST_FORMAT_CENTRE);
    m_listCtrl->InsertColumn(1, itemCol);

    itemCol.SetText(_T(“Column 3”));
    itemCol.SetAlign(wxLIST_FORMAT_RIGHT);
    m_listCtrl->InsertColumn(2, itemCol);

    // to speed up inserting we hide the control temporarily
    m_listCtrl->Hide();

    wxStopWatch sw;

    for ( int i = 0; i < NUM_ITEMS; i++ ) { m_listCtrl->InsertItemInReportView(i);
    }

    m_logWindow->WriteText(wxString::Format(_T(“%d items inserted in %ldms\n”),
    NUM_ITEMS, sw.Time()));
    m_listCtrl->Show();
    [/sourcecode]

    [sourcecode language=”c++”]
    void MyListCtrl::InsertItemInReportView(int i)
    {
    wxString buf;
    buf.Printf(_T(“This is item %d”), i);
    long tmp = InsertItem(i, buf, 0);
    SetItemData(tmp, i);

    buf.Printf(_T(“Col 1, item %d”), i);
    SetItem(tmp, 1, buf);

    buf.Printf(_T(“Item %d in column 2”), i);
    SetItem(tmp, 2, buf);
    }
    [/sourcecode]

  5. if(!table->Insert())

    {

    //判断添加是否成功
    wxMessageBox(“添加失败!”);
    return;

    }

    //查询记录,实际上就是用SQL语句来执行
    wxString sql = “select * from ictable”;//根据自己的需要写查询语句

    //wxMessageBox(sql); //测试SQL语句是否正确
    if(!table->QueryBySqlStmt(sql))//执行SQL语句
    {
    //判断是否执行成功
    wxMessageBox(“执行成功!”);
    return;
    }

    m_listCtrl1->DeleteAllItems();
    int i = 0; //表格行数
    while (table->GetNext())//获得当前游标位置下一条记录
    {
    m_listCtrl1->InsertItem(i,ChipNumbers);
    m_listCtrl1->SetItem(i,1,ChipCounts);
    m_listCtrl1->SetItem(i,2,ChipTypes);
    m_listCtrl1->SetItem(i,3,InspectorNumbers);
    m_listCtrl1->SetItem(i,4,CheckTimes);
    m_listCtrl1->SetItem(i,5,BugTypes);
    m_listCtrl1->SetItem(i,6,CheckItems);
    m_listCtrl1->SetItem(i,7,CheckResults);
    m_listCtrl1->SetItem(i,8,ErrorCounts);
    m_listCtrl1->SetItem(i,9,ErrorPercents);
    i++;
    }

  6. 想到一招:我插入数据库之后重新查询重新绑定!!!

  7. 你忘了column设置了。
    [sourcecode language=”c++”]
    wxListItem itemCol;
    itemCol.SetText(_T(“Column 1”));
    itemCol.SetImage(-1);
    m_listCtrl->InsertColumn(0, itemCol);

    itemCol.SetText(_T(“Column 2”));
    itemCol.SetAlign(wxLIST_FORMAT_CENTRE);
    m_listCtrl->InsertColumn(1, itemCol);

    itemCol.SetText(_T(“Column 3”));
    itemCol.SetAlign(wxLIST_FORMAT_RIGHT);
    m_listCtrl->InsertColumn(2, itemCol);
    [/sourcecode]

  8. 谢谢!其实我在程序运行的时候就设置了
    // 插入十列
    wxListItem itemCol;

    itemCol.SetText(wxT(“芯片编号”));
    itemCol.SetAlign(wxLIST_FORMAT_CENTRE);
    m_listCtrl1->InsertColumn(0,itemCol);
    m_listCtrl1->SetColumnWidth(0,60);

    itemCol.SetText(wxT(“芯片批次”));
    itemCol.SetAlign(wxLIST_FORMAT_CENTRE);
    m_listCtrl1->InsertColumn(1,itemCol);
    m_listCtrl1->SetColumnWidth(1,65);

    itemCol.SetText(wxT(“芯片型号”));
    itemCol.SetAlign(wxLIST_FORMAT_CENTRE);
    m_listCtrl1->InsertColumn(2,itemCol);
    m_listCtrl1->SetColumnWidth(2,65);

    itemCol.SetText(wxT(“检测员工号”));
    itemCol.SetAlign(wxLIST_FORMAT_CENTRE);
    m_listCtrl1->InsertColumn(3,itemCol);
    m_listCtrl1->SetColumnWidth(3,72);

    itemCol.SetText(wxT(“检测时间”));
    itemCol.SetAlign(wxLIST_FORMAT_CENTRE);
    m_listCtrl1->InsertColumn(4,itemCol);
    m_listCtrl1->SetColumnWidth(4,80);

    itemCol.SetText(wxT(“缺陷类型”));
    itemCol.SetAlign(wxLIST_FORMAT_CENTRE);
    m_listCtrl1->InsertColumn(5,itemCol);
    m_listCtrl1->SetColumnWidth(5,80);

    itemCol.SetText(wxT(“检测项”));
    itemCol.SetAlign(wxLIST_FORMAT_CENTRE);
    m_listCtrl1->InsertColumn(6,itemCol);
    m_listCtrl1->SetColumnWidth(6,78);

    itemCol.SetText(wxT(“检测结果”));
    itemCol.SetAlign(wxLIST_FORMAT_CENTRE);
    m_listCtrl1->InsertColumn(7,itemCol);
    m_listCtrl1->SetColumnWidth(7,60);

    itemCol.SetText(wxT(“错误个数”));
    itemCol.SetAlign(wxLIST_FORMAT_CENTRE);
    m_listCtrl1->InsertColumn(8,itemCol);
    m_listCtrl1->SetColumnWidth(8,60);

    itemCol.SetText(wxT(“错误比例”));
    itemCol.SetAlign(wxLIST_FORMAT_CENTRE);
    m_listCtrl1->InsertColumn(9,itemCol);
    m_listCtrl1->SetColumnWidth(9,60);

发表评论

电子邮件地址不会被公开。 必填项已用*标注