Frage

Ich versuche, die Microsoft Hierarchical Flexgrid (MSHFlexGrid) in einem Visual C ++ (VS 2005) zu verwenden. Ich habe das Gitter gezeigt ist, und kann manuell Daten in den einzelnen Zellen hinzuzufügen. Doch nach Online- Dokumentation ich gelesen habe, sollte ich in der Lage sein, die hierarchische Natur zeigen der Daten (daher MSHFlexGrid anstelle von MSFlexGrid) durch die Form als Record definieren. Ich kann diese feine tun (durch die put_RecordSource Methode des Rasterobjekt verwendet wird), aber ich bin ratlos, wie die aktuellen Daten hinzuzufügen.

Ich habe gelesen, dass der beste Weg, dies zu tun, ist ein ADO Data Control zu verwenden (dh ADODC) Komponente und bindet es als Datasource für das Grid. Sie können dann angeben "provider = MSDataShape; Datenprovider = none;" als Anbieter der Datacontrol und mit Daten füllen. Wenn ich SQL tun, würde ich meine SELECT-Abfrage als Datenherkunft angeben, dann rufen Sie Refresh () und die Daten, die die Steuerlast lassen.

Allerdings sind meine Daten in benutzerdefinierten Objekte. Ich weiß, was angezeigt werden muss, ich bin nur mit einem Verlust in Bezug auf die beste Art und Weise die Daten in das Flextabelle einzufügen und noch den eingebauten Funktionen der Steuerung verwendet werden. Ich bin für alle Vorschläge offen, aber ich brauche die Daten lokal zu halten (dh keinen JET, Access, etc.).

Hier ist ein Code:

Im Header:

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

cav:

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

Keine korrekte Lösung

Andere Tipps

Die Probe sprach über ein ADODB.Recordset Aufbau und es als Datenquelle von ADODC verwenden. Der Code, den Sie geben baut eine SQL und verwenden Sie es als Datenquelle von ADODC. Ich glaube nicht, dass Sie ein ADODB.Recordset mit einem String ersetzen können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top