コード例 #1
0
 void AddColumn(string name, Type type)
 {
     if (mMap != null && mMap.Editing)
     {
         try
         {
             Layer sLayer = (Layer)dataGridView1.Tag;
             sLayer.AddField(name, type);
         }
         catch (Exception ea)
         {
             MessageBox.Show(ea.Message, "出错");
         }
     }
 }
コード例 #2
0
ファイル: DataIO.cs プロジェクト: gisvip/LightGIS
        //读dbf文件
        private static void ReadDbf(ref Layer layer, string fileName)
        {
            int    sIndex = fileName.LastIndexOf("\\");
            string sName  = fileName.Substring(0, fileName.Length - 4) + ".dbf";

            //FileStream fs = null;
            //BinaryReader br = null;

            using (FileStream fs = new FileStream(sName, FileMode.Open, FileAccess.Read))
            {
                using (BinaryReader br = new BinaryReader(fs))
                {
                    //(1)读文件头
                    byte Vertion = br.ReadByte(); //版本信息
                                                  //更新日期
                    byte Year  = br.ReadByte();
                    byte Mouth = br.ReadByte();
                    byte Day   = br.ReadByte();

                    Int32 RecordNum    = br.ReadInt32();                                              //记录条数
                    Int16 HeadLength   = br.ReadInt16();                                              //文件头字节数
                    Int16 RecordLength = br.ReadInt16();                                              //一条记录的字节长度
                    br.ReadBytes(20);                                                                 //跳过保留字节、dBASE IV编密码标记、MXD标识等信息

                    int    FieldsCount = (HeadLength - 32) / 32;                                      //表中记录项的个数
                    Byte[] FieldLength = new Byte[FieldsCount];                                       //各记录项的长度
                    for (int i = 0; i < FieldsCount; i++)                                             //读取各个记录项描述信息
                    {
                        Byte[] sFieldName = br.ReadBytes(11);                                         //记录项名称
                        string FieldName  = Encoding.GetEncoding("GBK").GetString(sFieldName).Trim(); //将记录项名称转为字符串
                        Byte   FieldType  = br.ReadByte();                                            //记录项数据类型
                        br.ReadBytes(4);                                                              //跳过保留字节
                        FieldLength[i] = br.ReadByte();                                               //记录项长度
                        Byte DemicalCount = br.ReadByte();                                            //记录项精度
                        br.ReadBytes(14);                                                             //跳过保留字节、工作区ID、MDX标识

                        if (FieldType == 67)                                                          //记录项是字符型
                        {
                            layer.AddField(FieldName, typeof(string));
                            layer.Records.Columns[Layer.FIELD_START_INDEX + i].MaxLength = FieldLength[i];
                        }
                        else if (FieldType == 78)//记录项是数值型
                        {
                            if (DemicalCount == 0)
                            {
                                layer.AddField(FieldName, typeof(Int32));
                            }
                            else
                            {
                                layer.AddField(FieldName, typeof(double));
                            }
                        }
                        else
                        {
                            layer.AddField(FieldName, typeof(string));
                            layer.Records.Columns[Layer.FIELD_START_INDEX + i].MaxLength = FieldLength[i];
                        }
                    }
                    byte Terminator = br.ReadByte();//记录项终止标识
                    //(2)读文件记录

                    Byte[] svalue;
                    Int32  sint;
                    Double sdouble;
                    string str;

                    for (int i = 0; i < RecordNum; i++)       //逐条记录进行读取
                    {
                        br.ReadByte();                        //每条记录开头是一个空字符
                        for (int j = 0; j < FieldsCount; j++) //读取记录中的每个记录项
                        {
                            svalue = br.ReadBytes(FieldLength[j]);

                            if (layer.Records.Columns[j + Layer.FIELD_START_INDEX].DataType == typeof(Int32))
                            {
                                try
                                {
                                    str = Encoding.ASCII.GetString(svalue);
                                    if (Int32.TryParse(str, out sint))
                                    {
                                        layer.Records.Rows[i][j + Layer.FIELD_START_INDEX] = sint;
                                    }
                                }
                                catch (Exception)//文件中可能有非法字符或浮点数,遇到则不显示或进行转换
                                {
                                    try
                                    {
                                        str = Encoding.ASCII.GetString(svalue);
                                        if (Double.TryParse(str, out sdouble))
                                        {
                                            layer.Records.Rows[i][j + Layer.FIELD_START_INDEX] = (double)sdouble;
                                        }
                                    }
                                    catch (Exception) { }
                                }
                            }
                            else if (layer.Records.Columns[j + Layer.FIELD_START_INDEX].DataType == typeof(Double))
                            {
                                try
                                {
                                    str = Encoding.ASCII.GetString(svalue);
                                    if (Double.TryParse(str, out sdouble))
                                    {
                                        layer.Records.Rows[i][j + Layer.FIELD_START_INDEX] = sdouble;
                                    }
                                }
                                catch (Exception) { }
                            }
                            else if (layer.Records.Columns[j + Layer.FIELD_START_INDEX].DataType == typeof(string))
                            {
                                layer.Records.Rows[i][j + Layer.FIELD_START_INDEX] = Encoding.GetEncoding("GBK").GetString(svalue).Trim();
                            }
                        }
                    }
                }
            }
        }