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.


Anmelden zum Antworten