Domanda

Sto cercando di utilizzare il Microsoft Hierarchical FlexGrid (MSHFlexGrid) in un Visual C ++ (VS 2005). Ho la griglia mostrata, e posso aggiungere manualmente dati alle singole celle. Tuttavia, secondo che ho letto, dovrei essere in grado di mostrare la natura gerarchica dei dati (quindi MSHFlexgrid anziché MSFlexGrid) definendo la forma del record. Posso farlo bene (utilizzando il metodo put_RecordSource dell'oggetto griglia), ma io sono in perdita su come aggiungere i dati effettivi.

Ho letto che il modo migliore per farlo è quello di utilizzare un controllo dati ADO (cioè ADODC) componente e associarlo come il DataSource per la griglia. È quindi possibile specificare "Provider = MSDataShape; provider di dati = none;" come il fornitore del DataControl e riempirlo con i dati. Se fossi facendo SQL, avrei specificare le mie query SELECT come l'origine record, quindi chiamare Refresh () e lasciare caricare il controllo dei dati.

Tuttavia, il mio dati sono in oggetti personalizzati. So cosa deve essere visualizzato, sono solo ad una perdita quanto riguarda il modo migliore per inserire i dati nel FlexGrid e ancora utilizzare il costruito nel funzionalità del controllo. Sono aperto a qualsiasi suggerimento, ma ho bisogno di mantenere i dati locali (cioè non JET, Access, ecc).

Ecco un po 'di codice:

In intestazione:

....
// Variable to control the Flex Grid component
CMshflexgrid1 m_grid;  //generated by wizard from the MSHFlexGrid component

// to control the data source hierarchical information
CAdodc1 m_adodc1;
....

In cpp:

....
BOOL MyDialogClass::OnInitDialog()
{
  CDialog::OnInitDialog();

  m_grid.Clear();

  CString strCn = "provider=msdatashape;data provider=none;"; 
  m_adodc1.put_ConnectionString(strCn);

  CString BackupOfRecordSource = "";
  BackupOfRecordSource = m_adodc1.get_RecordSource();

  //CString strShape = "SHAPE APPEND new adInteger As PID, New adVarChar(10) As StudentName, ((SHAPE APPEND new adInteger As ChID, New adVarChar(10) As Course, ((SHAPE APPEND new adInteger As GrndChID, New adBSTR As Description) RELATE  ChID TO GrndChID) As GrandChild) RELATE PID TO ChID) AS Child";
  CString strShape = "SHAPE APPEND new adInteger As PID, New adVarChar(10) As StudentName";
  m_adodc1.put_RecordSource(strShape);
  m_adodc1.Refresh();
  m_grid.Refresh();

  BackupOfRecordSource = m_adodc1.get_RecordSource();  //returns the strShape that I just put in

  //ADD RECORDS HERE!  HOW?

  return TRUE;
}

Nessuna soluzione corretta

Altri suggerimenti

Il campione ha parlato di costruire un ADODB.Recordset e usarlo come fonte dei dati di ADODC. Il codice si dà sta costruendo uno SQL e usarlo come fonte di dati di ADODC. Non credo che si può sostituire un ADODB.Recordset con una stringa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top