int CInteractionStructureView::OnCreate(LPCREATESTRUCT lpCreateStruct) {
    if (CXTPReportView::OnCreate(lpCreateStruct) == -1) {
        return -1;
    }

    GetReportCtrl().SetPaintManager(new CXTPReportInteractionStructurePaintManager());
    CXTPToolTipContext* pToolTipContext = GetReportCtrl().GetToolTipContext();
    if (pToolTipContext != NULL) {
        pToolTipContext->SetStyle(xtpToolTipOffice2007);
        pToolTipContext->SetMaxTipWidth(200);
        pToolTipContext->SetMargin(CRect(2, 2, 2, 2));  
        pToolTipContext->SetDelayTime(TTDT_INITIAL, 1000);
    }

    LoadImages();

    CXTPReportControl& wndReport = GetReportCtrl();
    CXTPReportColumn* pColumn = wndReport.AddColumn(new CXTPReportColumn(0, _T("Name"), 250));
    pColumn->SetTreeColumn(TRUE);
    pColumn->SetAlignment(DT_VCENTER);
    pColumn->SetEditable(FALSE);
    pColumn->SetSortable(TRUE);
    pColumn->SetSortIncreasing(TRUE);

    pColumn = wndReport.AddColumn(new CXTPReportColumn(ICON_COLUMN_NO /*1*/, _T(""), 30));
    pColumn->SetMinWidth(25);
    pColumn->SetAlignment(DT_RIGHT);
    pColumn->SetEditable(FALSE);
    pColumn->EnableResize(FALSE);

    wndReport.SetGridStyle(false, xtpReportGridNoLines);
    wndReport.GetReportHeader()->AllowColumnRemove(FALSE);

    wndReport.GetPaintManager()->SetColumnStyle(xtpReportColumnFlat);
    wndReport.EditOnClick(FALSE);
	wndReport.SetMultipleSelection(true);
    wndReport.SetTreeIndent(7);
    wndReport.ShowHeader(FALSE);
    wndReport.ShowRowFocus(FALSE);
    wndReport.GetReportHeader()->AllowColumnResize(false);
    wndReport.SetSortRecordChilds(TRUE);
    wndReport.GetColumns()->SetSortColumn(wndReport.GetColumns()->GetAt(0), TRUE);
    wndReport.GetPaintManager()->m_bShadeSortColumn = FALSE;

    ShowScrollBar(SB_HORZ, FALSE);

    RefreshList();
    return 0;
}
HRESULT CXTPReportDataManager::CreateColumns()
{
    HRESULT hr = E_FAIL;

    try
    {
        XTPREPORTADODB::FieldsPtr pFields;
        if (FAILED(hr = m_pDataSource->get_Fields(&pFields)) || pFields == NULL)
            return hr;
        long lFields;
        if (FAILED(hr = pFields->get_Count(&lFields)) || lFields == 0)
            return hr;
        VARIANT vtIdx;
        vtIdx.vt = VT_I4;
        for (int i = 0; i < lFields; i++)
        {
            vtIdx.lVal = i;
            XTPREPORTADODB::FieldPtr pField;
            if (FAILED(hr = pFields->get_Item(vtIdx, &pField)) || pField == NULL)
                break;
            /*          XTPREPORTADODB::DataTypeEnum dteType;
            			if (FAILED(hr = pField->get_Type(&dteType)))
            				break;
            			if (dteType == XTPREPORTADODB::adLongVarBinary)
            				continue;*/
            BSTR bstrName;
            pField->get_Name(&bstrName);
            CString strName(bstrName);
            ::SysFreeString(bstrName);
            CXTPReportColumn* pColumn = new CXTPReportColumn(i, strName, 100);
            if (!pColumn)
                break;
            long lAttrs;
            if (SUCCEEDED(hr = pField->get_Attributes(&lAttrs)) && (lAttrs & XTPREPORTADODB::adFldUpdatable))
                pColumn->SetEditable(TRUE);
            m_pReportControl->AddColumn(pColumn);
        }
    }
    catch(_com_error &e)
    {
        TRACE_ProviderError(m_pConnection);
        TRACE_ComError(e);
        hr = FAILED(hr) ? hr : E_FAIL;
    }
    catch(...)
    {
        TRACE(_T("Unknown error in CreateColumns()\n"));
        hr = FAILED(hr) ? hr : E_FAIL;
    }

    return FAILED(hr) ? hr : S_OK;
}