Pregunta

Estoy tratando de utilizar el Microsoft Hierarchical FlexGrid (MSHFlexGrid) en un Visual C ++ (VS 2005). Tengo la cuadrícula se muestra, y que puedo añadir manualmente los datos a las células individuales. Sin embargo, de acuerdo con la línea que he leído, yo debería ser capaz de mostrar la naturaleza jerárquica de los datos (por lo tanto MSHFlexGrid en lugar de MSFlexGrid) mediante la definición de la forma que el RecordSource. Puedo hacer eso bien (utilizando el método put_RecordSource del objeto de la cuadrícula), sin embargo estoy en una pérdida en cuanto a cómo agregar los datos reales.

He leído que la mejor manera de hacer esto es utilizar un control de datos ADO (es decir ADODC) componentes y obligar a éste como el origen de datos para la cuadrícula. A continuación, puede especificar "Provider = MSDataShape; proveedor de datos = none;" como el proveedor de la DataControl y llenarlo con los datos. Si yo estuviera haciendo SQL, me gustaría especificar la consulta SELECT como el RecordSource, a continuación, llamar a Refresh () y dejar que el control de la carga de los datos.

Sin embargo, mis datos están en los objetos personalizados. Yo sé lo que hay que mostrar, sólo estoy en una pérdida en cuanto a la mejor manera de insertar los datos en el FlexGrid y seguir utilizando el construido en características del control. Estoy abierto a cualquier sugerencia, pero tengo que mantener los datos locales (es decir, sin JET, Access, etc.).

Aquí hay algo de código:

En la cabecera:

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

No hay solución correcta

Otros consejos

La muestra habló de la construcción de un ADODB.Recordset y utilizarlo como fuente de datos de ADODC. El código que da es la construcción de un SQL y lo utilizan como fuente de datos de ADODC. Creo que no se puede reemplazar un ADODB.Recordset con una cadena.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top