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

using GeoScene.Data;
using GeoScene.Globe;
using GeoScene.Engine;
using System.Collections;

namespace WorldGIS
{
    public partial class CtrlLineFieldsValuePage : UserControl
    {
        GSOGlobeControl mGlobeControl;
        GSOLayer mlayer;
        GSOFeature m_feature;

        public static DataTable dt = null;

        public CtrlLineFieldsValuePage(GSOFeature feature,GSOGlobeControl globeControl)
        {
            InitializeComponent();
            mGlobeControl = globeControl;
            m_feature = feature;
        }
        public CtrlLineFieldsValuePage(GSOFeature feature,GSOLayer layer, GSOGlobeControl globeControl)
        {
            InitializeComponent();
            mGlobeControl = globeControl;
            m_feature = feature;

            mlayer = layer;
        }
      
        private void CtrlLineFieldsValuePage_Load(object sender, EventArgs e)
        {
           
            if (m_feature != null)
            {
                try
                {
                    dt = new DataTable(m_feature.Name);
                    DataColumn dcName = new DataColumn("属性名", typeof(string));
                    DataColumn dcValue = new DataColumn("属性值", typeof(string));
                    dt.Columns.Add(dcName);
                    dt.Columns.Add(dcValue);
                    dt.Columns["属性名"].ReadOnly = true;
                    
                    if (m_feature.GetFieldCount() > 0)
                    {
                        for (int j = 0; j < m_feature.GetFieldCount(); j++)
                        {
                            DataRow dr = dt.NewRow();
                            GSOFieldDefn field = (GSOFieldDefn)m_feature.GetFieldDefn(j);
                            if (field != null)
                            {
                                dr["属性名"] = field.Name;
                                object obj = m_feature.GetValue(j);
                                if (obj != null)
                                {
                                    dr["属性值"] = obj.ToString();                                  
                                   
                                    if (obj.GetType() == typeof(DateTime))
                                    {
                                        DateTime date = DateTime.Parse(obj.ToString());
                                        dr["属性值"] = date.ToShortDateString();
                                        
                                    }
                                }
                            }
                            dt.Rows.Add(dr);
                        }
                    }

                    dataGridView1.DataSource = dt;
                    dataGridView1.ReadOnly = !mlayer.Editable;
                    dataGridView1.Columns[0].Width = 100;
                    dataGridView1.Columns[1].Width = 200;
                   
                }
                catch (System.Exception exp)
                {
                    Log.PublishTxt(exp);
                }
            }
        }

       

        private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            mGlobeControl.Globe.AddToEditHistroy(mlayer, m_feature, EnumEditType.Modify);

            bool bl = true;
            object obj = dt.Rows[e.RowIndex][e.ColumnIndex];
            GSOFieldDefn field = (GSOFieldDefn)m_feature.GetFieldDefn(e.RowIndex);
            switch (field.Type)
            {
                case EnumFieldType.Float:
                    float value = 0;
                    bl = float.TryParse(obj.ToString(), out value);
                    break;
                case EnumFieldType.Double:
                    double value1 = 0;
                    bl = double.TryParse(obj.ToString(), out value1);
                    break;
                case EnumFieldType.INT16:
                    Int16 value2 = 0;
                    bl = Int16.TryParse(obj.ToString(), out value2);
                    break;
                case EnumFieldType.INT32:
                    Int32 value3 = 0;
                    bl = Int32.TryParse(obj.ToString(), out value3);
                    break;
                case EnumFieldType.INT64:
                    Int64 value4 = 0;
                    bl = Int64.TryParse(obj.ToString(), out value4);
                    break;
                case EnumFieldType.Date:
                    DateTime dtime = DateTime.Now;
                    bl = DateTime.TryParse(obj.ToString(), out dtime);
                    break;
                case EnumFieldType.DateTime:
                    DateTime dtime1 = DateTime.Now;
                    bl = DateTime.TryParse(obj.ToString(), out dtime1);
                    break;
            }

            if (!bl)
            {
                MessageBox.Show("您输入的格式不正确!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                dt.Rows[e.RowIndex][e.ColumnIndex] = m_feature.GetValue(e.RowIndex);
                if (m_feature.GetValue(e.RowIndex).GetType() == typeof(DateTime))
                {
                    dt.Rows[e.RowIndex][e.ColumnIndex] = ((DateTime)m_feature.GetValue(e.RowIndex)).ToShortDateString();
                }
                return;
            }
            else
            {
                m_feature.SetValue(e.RowIndex, dt.Rows[e.RowIndex][e.ColumnIndex]);
            }

        
          
        }

        private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (mlayer != null && mlayer.Editable == true)
            {
                if (e.RowIndex < 0 || e.ColumnIndex < 0)
                {
                    return;
                }
                object obj = dt.Rows[e.RowIndex][e.ColumnIndex];
                if (obj.ToString().Length < 8)
                {
                    return;
                }
                DateTime date = DateTime.Now;
                bool bl = DateTime.TryParse(obj.ToString(), out date);
                if (bl)
                {
                    FrmSetDateTime dateTime = new FrmSetDateTime(obj.ToString());
                   
                    if (dateTime.ShowDialog() == DialogResult.OK)
                    {
                        if (dateTime.m_date != null)
                        {
                            dt.Rows[e.RowIndex][e.ColumnIndex] = dateTime.m_date;
                            
                            m_feature.SetValue(e.RowIndex, dateTime.d);
                        }
                    }
                }
            }
        }
    }
}