bool wxDbGridTableBase::AssignDbTable(wxDbTable *tab, int count, bool takeOwnership) { wxDbGridCellAttrProvider *provider; //Remove Information from grid about old data if (GetView()) { wxGrid *grid = GetView(); grid->BeginBatch(); grid->ClearSelection(); if (grid->IsCellEditControlEnabled()) { grid->DisableCellEditControl(); } wxGridTableMessage msg(this, wxGRIDTABLE_NOTIFY_ROWS_DELETED,0,m_rowtotal); grid->ProcessTableMessage(msg); } //reset our internals... Writeback(); if (m_dbowner) { delete m_data; } m_keys.Empty(); m_data = tab; //FIXME: Remove dynamic_cast before sumision to wxwin // if ((provider = dynamic_cast<wxDbGridCellAttrProvider *> (GetAttrProvider()))) // Using C casting for now until we can support dynamic_cast with wxWidgets provider = (wxDbGridCellAttrProvider *)(GetAttrProvider()); if (provider) { provider->AssignDbTable(m_data); } if (count == wxUSE_QUERY) { m_rowtotal = m_data ? m_data->Count() : 0; } else { m_rowtotal = count; } m_row = -1; //Add Information to grid about new data if (GetView()) { wxGrid * grid = GetView(); wxGridTableMessage msg(this, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, m_rowtotal); grid->ProcessTableMessage(msg); grid->EndBatch(); } m_dbowner = takeOwnership; m_rowmodified = false; return true; }
void wxDbGridTableBase::ValidateRow(int row) { wxLogDebug(wxT("ValidateRow(%i) currently on row (%i). Array count = %lu"), row, m_row, (unsigned long)m_keys.GetCount()); if (row == m_row) return; Writeback(); //We add to row as Count is unsigned! if ((unsigned)(row+1) > m_keys.GetCount()) { wxLogDebug(wxT("\trow key unknown")); // Extend Array, iterate through data filling with keys m_data->SetRowMode(wxDbTable::WX_ROW_MODE_QUERY); int trow; for (trow = m_keys.GetCount(); trow <= row; trow++) { wxLogDebug(wxT("Fetching row %i.."), trow); bool ret = m_data->GetNext(); wxLogDebug(wxT(" ...success=(%i)"),ret); GenericKey k = m_data->GetKey(); m_keys.Add(k); } m_row = row; } else { wxLogDebug(wxT("\trow key known centering data")); GenericKey k = m_keys.Item(row); m_data->SetRowMode(wxDbTable::WX_ROW_MODE_INDIVIDUAL); m_data->ClearMemberVars(); m_data->SetKey(k); if (!m_data->QueryOnKeyFields()) { wxDbLogExtendedErrorMsg(_T("ODBC error during Query()\n\n"), m_data->GetDb(),__TFILE__,__LINE__); } m_data->GetNext(); m_row = row; } m_rowmodified = false; }
wxDbGridTableBase::~wxDbGridTableBase() { wxDbGridCellAttrProvider *provider; //Can't check for update here as //FIXME: should i remove m_ColInfo and m_data from m_attrProvider if a wxDbGridAttrProvider // if ((provider = dynamic_cast<wxDbGridCellAttrProvider *>(GetAttrProvider()))) // Using C casting for now until we can support dynamic_cast with wxWidgets provider = (wxDbGridCellAttrProvider *)(GetAttrProvider()); if (provider) { provider->AssignDbTable(NULL); } delete [] m_ColInfo; Writeback(); if (m_dbowner) { delete m_data; } }