Newer
Older
LSPipeline / Backup / Forms / FrmNewDBFeatureDataset.cs
wxn on 1 Dec 2016 10 KB first
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using GeoScene.Globe;
using GeoScene.Engine;
using GeoScene.Data;

namespace WorldGIS.Forms
{
    public partial class FrmNewDBFeatureDataset : Form
    {
        private GeoScene.Globe.GSOGlobeControl globeControl1;
        public FrmNewDBFeatureDataset(GSOGlobeControl _globeControl1)
        {
            globeControl1 = _globeControl1;
            InitializeComponent();
        }

        private void FrmNewDBFeatureDataset_Load(object sender, EventArgs e)
        {
            comboBoxDataSourceList.Items.Clear();
            foreach (DatabaseConnectParams connectParams in Utility.connectParamsOfDatabase)
            {
                if (connectParams != null && (connectParams.databaseType == EnumDataSourceType.SqlServer || connectParams.databaseType == EnumDataSourceType.Oracle))
                {
                    comboBoxDataSourceList.Items.Add(connectParams.dataSourceFullName);
                }
            }
            comboBoxShpLayerList.Items.Clear();
            for (int i = 0; i < globeControl1.Globe.Layers.Count; i++)
            {
                GSOLayer layer = globeControl1.Globe.Layers[i];
                if (layer != null && System.IO.Path.GetExtension(layer.Name) == ".shp")
                {
                    comboBoxShpLayerList.Items.Add(layer.Caption);
                }
            }

            radioButtonUseTemplate.Checked = true;
            panelUseCustom.Enabled = false;
        }

        private void btnCreateModel_Click(object sender, EventArgs e)
        {
            if (comboBoxDataSourceList.SelectedItem == null)
            {
                MessageBox.Show("请选择一个数据源!", "提示");
                return;
            }
            GSODataSource ds = Utility.getDataSourceByFullName(globeControl1, comboBoxDataSourceList.SelectedItem.ToString().Trim());
            if (ds == null)
            {
                MessageBox.Show("数据源不能为空!", "提示");
                return;
            }
            string newLayerName = textboxNewLayerName.Text.Trim();
            if (newLayerName == "")
            {
                MessageBox.Show("新建图层的名称不能为空!","提示");
                return;
            }
            GSOFeatureDataset newFeatureDataset = ds.CreateFeatureDataset(newLayerName);
            if (newFeatureDataset == null)
            {
                MessageBox.Show("新建图层的名称不符合要求!", "提示");
                return;
            }
            if (radioButtonUseTemplate.Checked == true)
            {
                string shpLayerName = comboBoxShpLayerList.Text;
                GSOLayer shpLayer = globeControl1.Globe.Layers.GetLayerByCaption(shpLayerName);
                if (shpLayer == null)
                {
                    MessageBox.Show("您选择的图层模板不存在!", "提示");
                    return;
                }
                if (shpLayer.Dataset != null && shpLayer.Dataset is GSOFeatureDataset)
                {
                    GSOFeatureDataset shpFeatureDataset = shpLayer.Dataset as GSOFeatureDataset;
                    for (int i = 0; i < shpFeatureDataset.FieldCount; i++)
                    {
                        GSOFieldAttr fielddef = shpFeatureDataset.GetField(i);

                        GSOFieldAttr field = new GSOFieldAttr();
                        field.Name = fielddef.Name;
                        field.Type = fielddef.Type;
                        field.Width = fielddef.Width;
                        field.Precision = fielddef.Precision;
                        bool res = newFeatureDataset.AddField(field);
                    }

                    newFeatureDataset.Save();
                    MessageBox.Show("图层创建成功!", "提示");
                }
                else
                {
                    MessageBox.Show("您选择的图层模板不是矢量图层!", "提示");
                    return;
                }
            }
            else if (radioButtonUseCustom.Checked == true)
            {
                int rowCount = dataGridView1.Rows.Count;
                for (int i = 0; i < rowCount; i++)
                {
                    string fieldName = dataGridView1.Rows[i].Cells[0].Value.ToString();
                    string fieldType = dataGridView1.Rows[i].Cells[1].Value.ToString();
                    string fieldWidth = dataGridView1.Rows[i].Cells[2].Value.ToString();
                    string fieldPrecision = dataGridView1.Rows[i].Cells[3].Value.ToString();
                    EnumFieldType enumFieldType = EnumFieldType.Text;
                    int intFieldWidth = 2000;
                    int intFieldPrecision = 0;
                    if (fieldType == "Double")
                    {
                        enumFieldType = EnumFieldType.Double;
                        intFieldWidth = 8;
                        if (int.TryParse(fieldPrecision, out intFieldPrecision) == false)
                        {
                            intFieldPrecision = 2;
                        }
                    }
                    else if (fieldType == "Int32")
                    {
                        enumFieldType = EnumFieldType.INT32;
                        intFieldWidth = 4;
                    }
                    else if (fieldType == "Date")
                    {
                        enumFieldType = EnumFieldType.Date;
                        intFieldWidth = 7;
                    }
                    else
                    {
                        int.TryParse(fieldWidth, out intFieldWidth);
                    }
                    
                    
                    GSOFieldAttr field = new GSOFieldAttr();
                    field.Name = fieldName;
                    field.Type = enumFieldType;
                    field.Width = intFieldWidth;
                    if (field.Type == EnumFieldType.Double)
                    {
                        field.Precision = intFieldPrecision;
                    }                    
                    bool res = newFeatureDataset.AddField(field);
                }
                newFeatureDataset.Save();
                MessageBox.Show("图层创建成功!", "提示");
            }
        }        

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void radioButtonUseTemplate_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButtonUseTemplate.Checked == true)
            {
                radioButtonUseCustom.Checked = false;
                panelUserTemplate.Enabled = true;
            }
            else
            {
                radioButtonUseCustom.Checked = true;
                panelUserTemplate.Enabled = false;
            }
        }

        private void radioButtonUseCustom_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButtonUseCustom.Checked == true)
            {
                radioButtonUseTemplate.Checked = false;
                panelUseCustom.Enabled = true;
            }
            else
            {
                radioButtonUseTemplate.Checked = true;
                panelUseCustom.Enabled = false;
            }
        }

        private void buttonAddField_Click(object sender, EventArgs e)
        {
            string fieldName = textBoxFieldName.Text.Trim();
            if (fieldName == "")
            {
                MessageBox.Show("字段名称不能为空!", "提示");
                return;
            }
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                if (dataGridView1.Rows[i].Cells[0].Value == null)
                {
                    MessageBox.Show("字段名称不能为空!", "提示");
                    return; 
                }
                if (dataGridView1.Rows[i].Cells[0].Value.Equals(fieldName) == true)
                {
                    MessageBox.Show("字段名称已存在!", "提示");
                    return;
                }
            }

            if (comboBoxFieldType.SelectedItem == null)
            {
                MessageBox.Show("请选择一个字段类型!", "提示");
                return;
            }
            string fieldType = comboBoxFieldType.SelectedItem.ToString().Trim();

            string fieldWidth = textBoxFieldWidth.Text.Trim();
            int intFieldWidth = 0;

            string fieldPrecision = textBoxFieldPrecision.Text.Trim();
            int intFieldPrecision = 0;            

            if (fieldType == "Double")
            {
                intFieldWidth = 8;
                if (int.TryParse(fieldPrecision, out intFieldPrecision) == false)
                {
                    MessageBox.Show("请输入一个正确的字段精度!", "提示");
                    return;
                }
            }
            else if (fieldType == "Int32")
            {
                intFieldWidth = 4;
                intFieldPrecision = 0;
            }
            else if (fieldType == "Date")
            {
                intFieldWidth = 7;
                intFieldPrecision = 0;
            }
            else
            {
                if (int.TryParse(fieldWidth, out intFieldWidth) == false)
                {
                    MessageBox.Show("请输入一个正确的字段长度!", "提示");
                    return;
                }
                intFieldPrecision = 0;
            }
            
            int rowIndex = dataGridView1.Rows.Add();
            dataGridView1.Rows[rowIndex].Cells[0].Value = fieldName;
            dataGridView1.Rows[rowIndex].Cells[1].Value = fieldType;
            dataGridView1.Rows[rowIndex].Cells[2].Value = intFieldWidth;
            dataGridView1.Rows[rowIndex].Cells[3].Value = intFieldPrecision;
        }

        private void buttonDeleteField_Click(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count <= 0)
            {
                MessageBox.Show("请在表格中选中要删除的字段!","提示");
                return;
            }
            if (MessageBox.Show("确定要删除选中的字段吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
            {
                for (int i = dataGridView1.SelectedRows.Count - 1; i >= 0; i--)
                {
                    dataGridView1.Rows.Remove(dataGridView1.SelectedRows[i]);
                }
            }
        }
    }
}