Utilisez un MSHFlexGrid avec des données non-base de données et définir encore la forme

StackOverflow https://stackoverflow.com/questions/1732721

  •  20-09-2019
  •  | 
  •  

Question

Je suis en train d'utiliser le Microsoft Hierarchical FlexGrid (MSHFlexGrid) dans un Visual C ++ (VS 2005). J'ai la grille montré, et je peux ajouter manuellement des données aux cellules individuelles. Toutefois, selon en ligne j'ai lu, je devrais être en mesure de montrer la nature hiérarchique des données (donc MSHFlexGrid au lieu de MSFlexGrid) en définissant la forme que la RecordSource. Je peux le faire bien (en utilisant la méthode put_RecordSource de l'objet de la grille), mais je suis à une perte quant à la façon d'ajouter les données réelles.

J'ai lu que la meilleure façon de le faire est d'utiliser un composant ADO Data Control (c.-à-ADODC) et le lier comme source de données pour la grille. Vous pouvez ensuite spécifier "provider = MSDataShape, fournisseur de données = none;" en tant que fournisseur du DataControl et le remplir avec des données. Si je faisais SQL, je précise ma requête SELECT comme RecordSource, puis appelez Refresh () et laisser le contrôle charger les données.

Cependant, mes données sont dans des objets personnalisés. Je sais ce qui doit être affiché, je suis juste à une perte de la meilleure façon d'insérer les données dans le FlexGrid et utiliser encore intégré dans les fonctionnalités du contrôle. Je suis ouvert à toute suggestion, mais je dois garder les données locales (pas de JET, accès, etc.).

Voici un code:

En-tête:

....
// 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;
....

En 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;
}

Pas de solution correcte

Autres conseils

L'échantillon a parlé de la construction d'un ADODB.Recordset et de l'utiliser comme source de ADODC de données. Le code que vous donnez est la construction d'un SQL et l'utiliser comme source de ADODC de données. Je ne pense pas que vous pouvez remplacer un ADODB.Recordset par une chaîne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top