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 + -
显示快捷键?