Pergunta

Estou tentando usar o Microsoft Hierárquico FlexGrid (MSHFlexGrid) em um C ++ visual (vs 2005). Eu tenho a grade mostrada e posso adicionar manualmente dados às células individuais. No entanto, de acordo com online documentação Eu li, eu deveria ser capaz de mostrar a natureza hierárquica dos dados (daí o mshflexGrid em vez de msflexGrid), definindo a forma como o registro. Eu posso fazer isso bem (usando o método put_recordsource do objeto Grid), no entanto, estou sem saber como adicionar os dados reais.

Eu li que a melhor maneira de fazer isso é usar um componente ADO Data Control (IE ADODC) e ligá -lo como o DataSource para a grade. Você pode então especificar "provider = msDataShape; provedor de dados = nenhum;" como fornecedor do DataControl e preencha -o com dados. Se eu estivesse fazendo o SQL, especificaria minha consulta selecionada como o Recordsource, ligue para refresh () e deixaria o controle carregar os dados.

No entanto, meus dados estão em objetos personalizados. Sei o que precisa ser exibido, estou apenas com uma perda de melhor maneira de inserir os dados no FlexGrid e ainda usar os recursos internos do controle. Estou aberto a quaisquer sugestões, mas preciso manter os dados locais (ou seja, sem jato, acesso etc.).

Aqui está algum código:

No cabeçalho:

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

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

Nenhuma solução correta

Outras dicas

A amostra falou sobre a criação de um adodb.recordset e usá -lo como fonte de dados do ADODC. O código que você fornece é criar um SQL e usá -lo como fonte de dados do ADODC. Eu não acho que você possa substituir um adodb.recordset por uma string.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top