SDI-Anwendung: FlexGrid aus Dokumenten-Klasse heraus aufrufen, Inhalt dann anzeigen in View-Klasse
-
Hallo,
mein FlexGrid ist nach einer SQL-Datenbankabfrage mit Daten befüllt.
Die Befüllung habe ich vorgenommen durch Aufruf einer Funktion mit dem Namen RefreshBoundData() aus der Dokumenten-Klasse heraus. RefreshBoundData() ist in der View-Klasse definiert. Das Flex-Grid wurde also in der View-Klasse befüllt.
Nun möchte ich gerne die Daten des Flex-Grids anzeigen. Der Aufruf der Anzeige-Funktion soll aber in der Dokumenten-Klasse erfolgen, weil ich dort auch anfangs über eine Dialog-Klasse den SQL-Abfrage-String zusammengestellt habe.
Hier ein Code-Schnippsel der Dokumenten-Klasse:
BOOL CDB1Doc::OnNewDocument() { // Zeiger auf Recordset und Bindung initialisieren m_pRs = NULL; m_piAdoRecordBinding = NULL; // // COM-Umgebung initialisieren ::CoInitialize(NULL); try { // Datensatzobjekt erzeugen m_pRs.CreateInstance(__uuidof(Recordset)); // // Datensatzobjekt öffnen m_pRs->Open((LPCTSTR)sqlstr, (LPCTSTR)m_strConnection, adOpenDynamic, adLockOptimistic, adCmdUnknown); // // // // Zeiger auf Bindungsschnittstelle des Datensatzes holen if (FAILED(m_pRs->QueryInterface(__uuidof(IADORecordBinding), (LPVOID *)&m_piAdoRecordBinding))) _com_issue_error(E_NOINTERFACE); // // Datensatzklasse an Recordset binden m_piAdoRecordBinding->BindToRecordset(&m_rsRecSet); // // Zeiger auf Ansicht holen POSITION pos = GetFirstViewPosition(); CDB1View* pView = (CDB1View*)GetNextView(pos); if (pView); // // Datensatzgruppe mit Formular synchronisieren pView->RefreshBoundData(); //Daten Aktualisieren //an dieser Stelle soll das Flex-Grid angezeigt werden return TRUE;Hier ein Code-Schnippsel der View-Klasse:
void CDB1View::RefreshBoundData(void) { CCustomRs* pRs; CString sw; // Zeiger auf Dokumentobjekt holen pRs = GetDocument()->GetRecSet(); //UpdateData(FALSE); //Win-XP steigt sonst an dieser Stelle aus col=8; while (!(GetDocument()->EndOfData())) { //sw.Format("i=%d",i); //AfxMessageBox(sw); pRs = GetDocument()->GetRecSet(); //Kopfzeile der Tabelle m_flexi.put_TextArray(0,"Fahrzeug"); m_flexi.put_TextArray(1,"Station"); m_flexi.put_TextArray(2,"Test"); m_flexi.put_TextArray(3,"Operator"); m_flexi.put_TextArray(4,"Zeit"); m_flexi.put_TextArray(5,"Limit Low"); m_flexi.put_TextArray(6,"Wert"); m_flexi.put_TextArray(7,"Limit High"); if (adFldOK == pRs->m_varVinStatus) m_flexi.put_TextArray(col,pRs->m_strVINdb); else m_flexi.put_TextArray(col,""); col++; GetDocument()->MoveNext(); } }Kann mir jemand weiterhelfen ? Ich mach da schon ziemlich lange dran rum.
-
Hallo,
das o.a. FlexGrid-Steuerelement ist nicht unter WindowsXP einsetzbar.
Jedenfalls mir ist es nicht gelungen. Seid Ihr gleicher Meinung ?
Ich habe es auch in einer Dialogfeldbasierenden Anwendung ausprobiert. Dort funktioniert es auch nicht.