2009-11-14 27 views
0

我想在Visual C++(VS 2005)中使用Microsoft Hierarchical FlexGrid(MSHFlexGrid)。我顯示了網格,我可以手動將數據添加到單個單元格。然而,根據在線documentation我讀過,我應該能夠通過將SHAPE定義爲RecordSource來顯示數據的層次特性(因此MSHFlexGrid而不是MSFlexGrid)。我可以做到這一點(通過使用網格對象的put_RecordSource方法),但是我不知道如何添加實際數據。使用MSHFlexGrid與非數據庫數據,仍然定義形狀

我讀過這樣做的最好方法是使用ADO數據控件(即ADODC)組件並將其綁定爲網格的數據源。然後你可以指定「provider = msdatashape; data provider = none;」作爲DataControl的提供者並填充數據。如果我在做SQL,我會將我的SELECT查詢指定爲RecordSource,然後調用Refresh()並讓控件加載數據。

但是,我的數據是在自定義對象中。我知道需要顯示哪些內容,但對於將數據插入FlexGrid並仍然使用控件的內置功能的最佳方式而言,我感到茫然。我願意接受任何建議,但我需要保持數據本地(即沒有JET,訪問等)。

下面是一些代碼:

在報頭:

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

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

回答

0

樣品談到構建ADODB.Recordset並使用它作爲ADODC的數據源。您提供的代碼是構建SQL並將其用作ADODC的數據源。我不認爲你可以用一個字符串替換一個ADODB.Recordset。

+0

有什麼辦法可以使用記錄集並手動添加記錄嗎?我在網上找到的例子顯示VB6代碼來做到這一點,但我不知道如何在C++中做到這一點。 – user210825 2009-11-14 20:47:04

+0

ADO是基於COM的,您創建的對象和您調用的方法是相同的。 – 2009-11-15 02:35:38

相關問題