【问题标题】:wxGrid shows the old value instead of new value after user edits a cellwxGrid 在用户编辑单元格后显示旧值而不是新值
【发布时间】:2012-06-14 23:05:16
【问题描述】:

我在可编辑模式下创建了 wxGrid。我注册了以下事件处理程序。

class ReadWriteGrid : public wxGrid
{
public:
ReadWriteGrid(wxWindow *parent, wxWindowID ID,
            const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize,
            long style=262144, const wxString &name=wxGridNameStr)
            : wxGrid(parent, ID, pos, size, style, name)
{
    SetEditable();
}

};

EVT_GRID_CELL_CHANGE(IndexTableFrame::OnEditField)

现在,当用户更改单元格值时,我的函数会在完成后被调用。单元格值变回原来的值。

void IndexTableFrame::OnEditField(wxGridEvent& event)
 {
int RowNumber;
int ColNumber;
wxString type;
wxGridCellEditor *m_Editor;
wxString NewValue;
RowNumber = event.GetRow();
ColNumber = event.GetCol();
m_Editor = m_grid->GetDefaultEditorForCell(RowNumber,ColNumber);
NewValue = m_Editor->GetValue();
m_Editor->Destroy();
m_grid->SetCellValue(NewValue,RowNumber,ColNumber);
event.skip();   
   }

这是我第一次使用 WxWidget。我不确定如何避免单元格变回原来的值。

【问题讨论】:

    标签: c++ visual-c++ wxwidgets


    【解决方案1】:

    在许多应用程序中,必须在用户更改单元格值时对其进行动态处理(例如,根据新的单元格值动态更新其他屏幕控件;或通过以下方式发送数据)更改单元格时立即将串行端口连接到另一个设备)。

    如上所述,要求用户单击单独的“保存按钮”并不是在许多用例中用户可以接受的解决方案。

    我可以确认原始海报的观察结果:如果您创建一个 wxGrid 并将 wxEVT_GRID_CELL_CHANGED、wxEVT_GRID_CELL_CHANGING 或 wxEVT_GRID_EDITOR_HIDDEN 事件附加到它,则调用 grid->GetCellValue(row,col);返回旧值。处理函数的事件参数也不包含新文本。它看起来像 wxGrid 的一个“特性”。

    【讨论】:

      【解决方案2】:

      你太辛苦了!放松,让 wxGrid 承担压力。

      最简单的事情就是什么都不做。 wxGrid 将接受单元格中的用户编辑并显示更改,而无需您执行任何操作。当用户完成后,他可以单击一个按钮 SAVE,您可以在其中执行代码以从单元格中读取值并将它们用于您需要的任何内容。

      【讨论】:

      • ,是的,我什么也没做。附加到这个网格的表格非常复杂。用户在网格中编辑单元格值后,更改不会传递到下面的表格。失去焦点后,网格调用表的 getcellvalue(row,col) 返回它从文件中读取的原始值。
      • 那么我认为问题出在您“连接”桌子“下面”的方式上。如果你做得正确,那么 wxWidgets 框架应该会为你处理好事情。但是,这是相当先进的东西,我不是这方面的专家。
      【解决方案3】:

      您应该创建自己的继承自 wxGridTableBase 的类。

      然后您应该使用它的SetTable 方法将您的网格表对象附加到 wxGrid。

      wxGrid 对象将使用您的表的方法(GetValue、SetValue)来检索和存储数据。

      wxWidgets 附带了一个网格示例,它将帮助您了解 wxGrid 的工作原理。

      【讨论】:

        猜你喜欢
        • 2017-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-03
        • 1970-01-01
        • 2015-03-25
        • 2020-06-15
        相关资源
        最近更新 更多