C++ wxGrid在用户编辑单元格后显示旧值而不是新值
我在editablemode中创建了wxGrid。我注册了以下事件处理程序C++ wxGrid在用户编辑单元格后显示旧值而不是新值,c++,visual-c++,wxwidgets,C++,Visual C++,Wxwidgets,我在editablemode中创建了wxGrid。我注册了以下事件处理程序 class ReadWriteGrid : public wxGrid { public: ReadWriteGrid(wxWindow *parent, wxWindowID ID, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=2621
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网格单元格更改(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。我不知道如何避免单元格变回原来的值。您工作太辛苦了!放松,让wxGrid承受压力
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();
}
最简单的事情就是什么也不做。wxGrid将接受用户在单元格中的编辑并显示更改,而无需您执行任何操作。当用户完成后,他可以单击“保存”按钮,在该按钮中,您可以执行代码从单元格中读取值,并将其用于您需要的任何用途。在许多应用程序中,当用户更改单元格值时,必须对其进行动态处理,(例如,根据新的单元格值动态更新其他屏幕控件;或在单元格更改时通过串行端口立即将数据发送到其他设备) 在许多用例中,要求用户单击上面建议的单独的“保存按钮”并不是用户可以接受的解决方案
我可以通过原始海报确认观察结果:如果创建wxGrid并将wxEVT_GRID_CELL_CHANGED、wxEVT_GRID_CELL_CHANGED或wxEVT_GRID_EDITOR_HIDDEN events附加到wxGrid->GetCellValue(行、列);返回旧值。处理程序函数的事件参数也不包含新文本。它看起来像wxGrid的“功能”。您应该创建自己继承自的类 然后,应该使用wxGrid的方法将grid表对象附加到wxGrid wxGrid对象将使用表的方法(GetValue、SetValue)检索和存储数据
wxWidgets附带了一个网格示例,这将帮助您了解wxGrid是如何工作的。,是的,我什么也没做。附加到此网格的表非常复杂。用户编辑网格中的单元格值后,更改不会传递到下面的表。失去焦点后,网格调用getcellvalue(行,列)返回从文件读取的原始值的表。然后我相信问题在于您“附加”表的方式。如果您这样做正确,那么wxWidgets框架应该为您处理这些事情。但是,这是非常高级的东西,我不是这方面的专家。