2012-06-14 51 views
0

我在editablemode中创建了wxGrid。我注册了以下事件处理程序。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。我不确定如何避免细胞变回原有的价值。

回答

0

你正在努力工作!放松一下,让wxGrid承受压力。

最简单的做法是什么都不做。 wxGrid将接受单元格中的用户编辑并显示更改,而无需执行任何操作。当用户完成时,他可以点击SAVE按钮,在那里你可以实现代码来读取单元格中的值,并将其用于任何你需要的值。

+0

,雅我试着什么都不做。连接到这个网格的表格非常复杂。用户在网格中编辑单元格值后,更改不会传递到下面的表格。放松焦点后,网格调用表格的getcellvalue(row,col),该表格返回从文件读取的原始值。 – vgeta

+0

然后我相信问题在于你'附着'在桌子底下。如果你做得很好,那么wxWidgets框架应该为你提供帮助。然而,这是相当先进的东西,我不是这样做的专家。 – ravenspoint

1

在许多应用程序中,用户必须随时修改单元格值(例如,根据新单元格值即时更新其他屏幕上的控件;或者发送数据当细胞被改变时,立即通过串口到达另一个设备)。

要求用户点击上面建议的单独的“保存按钮”并不是用户在许多使用情况下可以接受的解决方案。

我可以用原来的海报确认意见:如果你创建一个wxGrid并附加任何wxEVT_GRID_CELL_CHANGED,wxEVT_GRID_CELL_CHANGING,或wxEVT_GRID_EDITOR_HIDDEN事件给它,调用并网> GetCellValue(行,列);返回旧值。处理函数的event参数也不包含新文本。它看起来像wxGrid的“特征”。

0

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

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

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

有一个wxWidgets附带的网格示例,它可以帮助您理解wxGrid的工作方式。

相关问题