2012-06-14 49 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的工作方式。

相關問題