appenddatasetdlg.cpp

来自「用VC+SuperMap开发的校园GIS系统」· C++ 代码 · 共 340 行

CPP
340
字号
// AppendDatasetDlg.cpp : implementation file
//

#include "stdafx.h"
#include "CampusGis.h"
#include "AppendDatasetDlg.h"
#include "MainFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAppendDatasetDlg dialog


CAppendDatasetDlg::CAppendDatasetDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CAppendDatasetDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CAppendDatasetDlg)
	//}}AFX_DATA_INIT
}


void CAppendDatasetDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAppendDatasetDlg)
	DDX_Control(pDX, IDOK, m_Ok);
	DDX_Control(pDX, IDC_CMBSOURCEDTNAME, m_cmbSourceDtName);
	DDX_Control(pDX, IDC_CMBDTNAME, m_cmbDtName);
	DDX_Control(pDX, IDC_CMBDSNAME, m_cmbDsName);
	DDX_Control(pDX, IDC_CMBSOURCEDSNAME, m_cmbSourceDsName);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CAppendDatasetDlg, CDialog)
	//{{AFX_MSG_MAP(CAppendDatasetDlg)
	ON_CBN_SELCHANGE(IDC_CMBSOURCEDSNAME, OnSelchangeCmbsourcedsname)
	ON_CBN_SELCHANGE(IDC_CMBSOURCEDTNAME, OnSelchangeCmbsourcedtname)
	ON_CBN_SELCHANGE(IDC_CMBDSNAME, OnSelchangeCmbdsname)
	ON_CBN_SELCHANGE(IDC_CMBDTNAME, OnSelchangeCmbdtname)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAppendDatasetDlg message handlers

void CAppendDatasetDlg::OnOK() 
{
	// TODO: Add extra validation here
    CsoDataSource objDs;
    CsoDatasetVector objSourceDtVector;
    CsoDatasetVector objDestDtVector;
    CsoRecordset objRecordset;
	BOOL bResult;
	CString strDatasourceName,strVectorName;

	//取源矢量数据集
	int index=m_cmbSourceDsName.GetCurSel();
	if(index < 0)
		return;
	m_cmbSourceDsName.GetLBText(index,strDatasourceName);
	objDs=m_SuperWorkspace->GetDatasources().GetItem(COleVariant(strDatasourceName));
	if(!objDs)
	{
		AfxMessageBox("数据源错误!");
		return;
	}

	index=m_cmbSourceDtName.GetCurSel();
	if(index < 0)
		return;
	m_cmbSourceDtName.GetLBText(index,strVectorName);
	objSourceDtVector=(CsoDatasetVector )objDs.GetDatasets().GetItem(COleVariant(strVectorName));
	if(!objSourceDtVector)
	{
		AfxMessageBox("数据集错误!");
		return;
	}

	//取要追加的矢量数据集
	index=m_cmbDsName.GetCurSel();
	if(index < 0)
		return;
	strDatasourceName.Empty();
	m_cmbDsName.GetLBText(index,strDatasourceName);
	objDs=m_SuperWorkspace->GetDatasources().GetItem(COleVariant(strDatasourceName));
	if(!objDs)
	{
		AfxMessageBox("数据源错误!");
		return;
	}

	index=m_cmbDtName.GetCurSel();
	if(index < 0)
		return;
	strVectorName.Empty();
	m_cmbDtName.GetLBText(index,strVectorName);
	objDestDtVector=(CsoDatasetVector )objDs.GetDatasets().GetItem(COleVariant(strVectorName));
	if(!objDestDtVector)
	{
		AfxMessageBox("所选数据集不是矢量数据集!");
		return;
	}
	if(!objDestDtVector.GetVector())
	{
		AfxMessageBox("所选数据集不是矢量数据集!");
		return;
	}
	objDestDtVector.Open();

	objRecordset=objDestDtVector.Query(_T(""),TRUE,NULL,NULL);
	if(!objDestDtVector)
	{
		AfxMessageBox("打开数据集时出错!");
		return;
	}
	bResult=objSourceDtVector.Append(objRecordset,TRUE);
	if(bResult)
		AfxMessageBox("添加成功!");
	else
		AfxMessageBox("添加失败!");
	objDs.ReleaseDispatch();
	objSourceDtVector.ReleaseDispatch();
	objRecordset.ReleaseDispatch();
	objDestDtVector.ReleaseDispatch();
}

BOOL CAppendDatasetDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	CsoDataSource objDs;

	CMainFrame *pFrame=(CMainFrame *)::AfxGetMainWnd();
	m_SuperWorkspace=&pFrame->m_SuperWorkspace;
	long lCount;
	lCount=m_SuperWorkspace->GetDatasources().GetCount();

	for(long i=1;i<=lCount;i++)
	{
		objDs=m_SuperWorkspace->GetDatasources().GetItem(COleVariant(i));
		m_cmbSourceDsName.AddString((LPCTSTR )objDs.GetAlias());
		m_cmbDsName.AddString((LPCTSTR )objDs.GetAlias());
	}
	m_cmbSourceDsName.SetCurSel(0);
	m_cmbSourceDtName.SetCurSel(0);
	m_cmbDtName.SetWindowText(_T(""));
	m_cmbDsName.SetCurSel(0);
	
	objDs.ReleaseDispatch();
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}



void CAppendDatasetDlg::OnSelchangeCmbsourcedsname() 
{
	CsoDataSource objDs;
    CsoDataset objDt	;
	CString strDatasourceName;
	long lCount;
	
	int index=m_cmbSourceDsName.GetCurSel();
	if(index < 0)
		return;
	m_cmbSourceDsName.GetLBText(index,strDatasourceName);
	if(strDatasourceName.IsEmpty())
		return;
	lCount=m_SuperWorkspace->GetDatasources().GetCount();
	for(long i=1;i<=lCount;i++)
	{
		objDs=m_SuperWorkspace->GetDatasources().GetItem(COleVariant(i));
		if(objDs)
		{
			if(_T(objDs.GetAlias())==_T(strDatasourceName))
			{	
				m_cmbSourceDtName.ResetContent();
				m_cmbDtName.ResetContent();
				for(long j=1;j<=objDs.GetDatasets().GetCount();j++)
				{
					
					objDt=objDs.GetDatasets().GetItem(COleVariant(j));
					if(objDt.GetVector())
						m_cmbSourceDtName.AddString(objDt.GetName());
				}
			}
		}
		else
			AfxMessageBox("数据源错误!");			
	}
	objDs.ReleaseDispatch();
	objDt.ReleaseDispatch();
}

void CAppendDatasetDlg::OnSelchangeCmbsourcedtname() 
{
    CsoDataSource objDs;
    CsoDataset objDt;
    long lDtType;	
	CString strDatasourceName,strDatasetName;
	//取得源数据集的类型
	int index=m_cmbSourceDsName.GetCurSel();
	if(index < 0)
		return;
	m_cmbSourceDsName.GetLBText(index,strDatasourceName);
	objDs=m_SuperWorkspace->GetDatasources().GetItem(COleVariant(strDatasourceName));
	if(!objDs)
	{
		AfxMessageBox("打开数据源错误!");
		return;
	}

	index=m_cmbSourceDtName.GetCurSel();
	if(index < 0)
		return;
	m_cmbSourceDtName.GetLBText(index,strDatasetName);
	objDt=objDs.GetDatasets().GetItem(COleVariant(strDatasetName));
	if(!objDt)
	{
		AfxMessageBox("打开数据集错误!");
		return;
	}
	else
		lDtType=objDt.GetType();

	//如果目标数据源已设置,则目标数据集相应改变
	index=m_cmbDsName.GetCurSel();
	if(index < 0)
		return;
	strDatasourceName.Empty();
	m_cmbDsName.GetLBText(index,strDatasourceName);
	objDs=m_SuperWorkspace->GetDatasources().GetItem(COleVariant(strDatasourceName));
	if(!objDs)
	{
		AfxMessageBox("打开数据源错误!");
		return;
	}
	else
	{
		m_cmbDtName.ResetContent();
		for(long i=1;i<=objDs.GetDatasets().GetCount();i++)
		{
			objDt=objDs.GetDatasets().GetItem(COleVariant(i));
			if(objDt.GetType()==lDtType)
				m_cmbDtName.AddString(objDt.GetName());
		}
		m_Ok.EnableWindow(false);
	}

	objDs.ReleaseDispatch();
	objDt.ReleaseDispatch();
}

void CAppendDatasetDlg::OnSelchangeCmbdsname() 
{
	long lDtType;
	//取得源数据集的类型
	int index=m_cmbDsName.GetCurSel();
	if(index < 0)
		return;
	CString strSourceDsName;
	m_cmbSourceDsName.GetLBText(index,strSourceDsName);
	if(strSourceDsName.IsEmpty())
		return;
	CsoDataSource objDs;
	objDs=m_SuperWorkspace->GetDatasources().GetItem(COleVariant(strSourceDsName));
	if(!objDs)
	{
		AfxMessageBox("打开数据源错误!");
		return;
	}
	CsoDataset objDt;
	CString strSourceDtName;
	index=m_cmbSourceDtName.GetCurSel();
	if(index < 0)
		return;
	m_cmbSourceDtName.GetLBText(index,strSourceDtName);
	if(strSourceDtName.IsEmpty())
		return;
	objDt=objDs.GetDatasets().GetItem(COleVariant(strSourceDtName));
	if(!objDt)
	{
		AfxMessageBox("打开数据集错误!");
		return;
	}
	lDtType=objDt.GetType();
	//改变目标数据集
	index=m_cmbDsName.GetCurSel();
	if(index < 0)
		return;
	CString strDsName,strDtName;
	m_cmbDsName.GetLBText(index,strDsName);
	if(strDsName.IsEmpty())
		return;
	objDs=m_SuperWorkspace->GetDatasources().GetItem(COleVariant(strDsName));
	if(!objDs)
	{
		AfxMessageBox("打开数据源错误!");
		m_cmbDsName.ResetContent();
		return;
	}
	m_cmbDsName.ResetContent();
	for(long i=1;i<=objDs.GetDatasets().GetCount();i++)
	{
		objDt=objDs.GetDatasets().GetItem(COleVariant(i));
		if(!objDt)
		{
			AfxMessageBox("打开数据集错误!");
			return;
		}
		if(lDtType==objDt.GetType())
		{
			if(!(objDt.GetDataSourceAlias() == strSourceDsName))
				m_cmbDtName.AddString(objDt.GetName());
		}
	}
	this->OnSelchangeCmbsourcedsname();
	objDs.ReleaseDispatch();
	objDt.ReleaseDispatch();
}

void CAppendDatasetDlg::OnSelchangeCmbdtname() 
{
	// TODO: Add your control notification handler code here
	int index;
	index=m_cmbDtName.GetCurSel();
	if(index >= 0)
		m_Ok.EnableWindow();
	else
		m_Ok.EnableWindow(FALSE);

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?