需要将wxListCtrl的代码更改为虚拟样式wxListCtrl的工作代码

时间:2019-06-27 00:33:53

标签: c++ wxwidgets

我是C ++的新手,并且用于GUI wxWidget。我的问题是wxListCtrl的代码如何更改为虚拟ListCtrl的工作代码...

现在我的代码在下面并且可以工作,但是我必须尝试使用​​虚拟样式

wxString SQL = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + table + "'";

    int gstate = mysql_query(conn,SQL);
        if(!gstate){
            res = mysql_store_result(conn);
            int num = 0;

            lcData->SetColumnWidth(0,wxLIST_AUTOSIZE_USEHEADER);
            lcData->InsertColumn(0,"rb.");

            while(row = mysql_fetch_row(res)){
                lcData->SetColumnWidth(num+1, wxLIST_AUTOSIZE_USEHEADER);
                lcData->InsertColumn(num+1,row[0]);

                num++;
            }

            if(res != NULL)
                mysql_free_result(res);

        }
    SQL = tcSQL->GetValue();

    tcLog->AppendText(SQL+"\n");
    gstate = mysql_query(conn,SQL);

            if(!gstate){
                res = mysql_store_result(conn);
                long num_field = mysql_num_fields(res);

                   long num = 0;
                lcData->SetColumnWidth(0,40);

                while(row = mysql_fetch_row(res)){

                    lcData->InsertItem(num, wxString::Format(_T("%4d"),num+1));

                    for(long i = 0; i < num_field; i++){

                        lcData->SetItem(num,i+1,row[i] );

                    }

                    num++;
                }

                if(res != NULL)
                    mysql_free_result(res);

在我编译程序并运行的地方出现此错误: SharedScreens

Thx。 YuMERA

1 个答案:

答案 0 :(得分:0)

虚拟wxListCtrl的想法是,您无需将数据放入其中,而是在控件需要时按需提供数据。因此,要使用虚拟控件,您需要更改代码的结构,并首先避免从数据库中获取所有项目,而是根据需要从覆盖的OnGetItemText()方法中检索它们。当然,为了能够覆盖它,您必须首先从wxListCtrl派生自己的类,并且还需要告诉控件它将拥有多少项(您将从{{1 }}进行查询)。