zoukankan      html  css  js  c++  java
  • 违法占耕辅助处理软件

    违法占耕辅助处理软件

    1、功能界面

    1.1登录界面

    1.2主界面

    1.2.1功能选项

    1.2.2系统设置

    1.3属性质量检查

    1.3.1检查项设置

    1.4属性对等计算

    1.4转换后属性质量检查

    1.5 多媒体处理

    主界面源码:

        public partial class MainForm : DevExpress.XtraEditors.XtraForm
        {
            /// <summary>
            /// 委托实现皮肤切换
            /// </summary>
            public MyDelegateGetSkin getSkinDel;
            /// 用于存储所有要素-属性计算
            /// </summary>
            private List<IFeatureLayer> listFLayerCalcu = null;
            /// <summary>
            /// 用于存储所有要素-转换前检查
            /// </summary>
            private List<IFeatureLayer> listFLayerZHQ_Check = null;

            /// <summary>
            /// 用于存储所有要素-转换后检查
            /// </summary>
            private List<IFeatureLayer> listFLayerZHH_Check = null;
            private void tsBTN_openGDB_Click(object sender, EventArgs e)
            {
               MyFolderBrowserDialog mfbd = new MyFolderBrowserDialog();
                if (mfbd.ShowDialog(this) == DialogResult.OK)
                {
                    listFLayerCalcu = new List<IFeatureLayer>();
                    cmbxFeatureCls.Items.Clear();//清空
                    culFeatLayer = null;//
                    //cmbxFeatureCls.SelectedIndex = -1;
                    //cmbxMB.SelectedIndex = -1;

                    string strGDB_Path = mfbd.DirectoryPath;
                    FileGDBWorkspaceFactory fac = new FileGDBWorkspaceFactory();
                    IFeatureWorkspace pFtWS = (IFeatureWorkspace)fac.OpenFromFile(strGDB_Path, 0);
                    IWorkspace pWork = (IWorkspace)pFtWS;
                    IEnumDataset pEnumDs = pWork.get_Datasets(esriDatasetType.esriDTFeatureClass);
                    IDataset pDs = pEnumDs.Next();
                    axMapControl1.Map.ClearLayers();
                    tslbStatus.Text = "正在加载要素...";
                    statusStrip1.Refresh();
                    while (pDs != null)
                    {
                        IFeatureClass temp = pDs as IFeatureClass;
                        
                        IFeatureLayer tempLayer = new FeatureLayer();
                        tempLayer.FeatureClass = temp;
                        tempLayer.Name = tempLayer.FeatureClass.AliasName;
                        listFLayerCalcu.Add(tempLayer);
                        cmbxFeatureCls.Items.Add(temp.AliasName);
                        axMapControl1.Map.AddLayer(tempLayer);
                        pDs = pEnumDs.Next();
                    }
                    tslbStatus.Text = "加载完成!";
                    tlSpStLb.Text = "  选项:属性对等计算  当前数据库:" + strGDB_Path;
                    statusStrip1.Refresh();
                }
            }

            /// <summary>
            /// 当前选择的待计算数据
            /// </summary>
            private IFeatureLayer culFeatLayer = null;
            /// <summary>
            /// 选择待计算的数据
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void cmbxFeatureCls_SelectedIndexChanged(object sender, EventArgs e)
            {
                culFeatLayer= listFLayerCalcu[cmbxFeatureCls.SelectedIndex];
            }

            private string strSelMB = String.Empty;
            /// <summary>
            /// 选择数据计算模板
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void cmbxMB_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (culFeatLayer==null)
                {
                    MessageBox.Show("请先选择图层");
                    return;
                }
                strSelMB = cmbxMB.SelectedItem.ToString();
            }

            /// <summary>
            /// 执行计算
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void tsBTN_ExcuteCacl_Click(object sender, EventArgs e)
            {
                if (culFeatLayer==null)
                {
                    MessageBox.Show("没有数据可计算!请先打开或选择数据", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                if (cmbxMB.SelectedIndex == -1)
                {
                    MessageBox.Show("请选择模板类型", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                DateTime dtStart = DateTime.Now;
                splashScreenManager1.ShowWaitForm();
                splashScreenManager1.SetWaitFormCaption("正在计算 "+ strSelMB);
                splashScreenManager1.SetWaitFormDescription("请耐心等待...");
                /*
                住宅类
                产业类
                公共服务类
                其他构筑物
                */
                if (strSelMB == "住宅类")
                {
                    string selSQL = String.Empty;
                    //计算---直接等于
                    selSQL = null;
                    IFeatureLayer tempFeatLayer = culFeatLayer;
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);

                    #region 
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "CITY_NAME");
                    CaculValue2(tempFeatLayer, selSQL, "CITY_NAME", "shi");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "XZQMC_XQ");
                    CaculValue2(tempFeatLayer, selSQL, "XZQMC_XQ", "xian");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "XZQMC_XZ");
                    CaculValue2(tempFeatLayer, selSQL, "XZQMC_XZ", "xiang");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "XZQMC_CUN");
                    CaculValue2(tempFeatLayer, selSQL, "XZQMC_CUN", "cun");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "XXDZ_Z");
                    CaculValue2(tempFeatLayer, selSQL, "XXDZ_Z", "zu");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "XXDZ_MPH");
                    CaculValue2(tempFeatLayer, selSQL, "XXDZ_MPH", "mph");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_KGSJ");
                    CaculValue2(tempFeatLayer, selSQL, "JBXX_KGSJ", "kgsj");
                    //超过本地区宅基地标准面积  cggdmj  GLXX_CCBZMJ
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "GLXX_CCBZMJ");
                    CaculValue3(tempFeatLayer, selSQL, "GLXX_CCBZMJ", "cggdmj");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "glxx_zygdmj");
                    CaculValue3(tempFeatLayer, selSQL, "glxx_zygdmj", "zygdmj");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "glxx_zyyjjbntmj");
                    CaculValue3(tempFeatLayer, selSQL, "glxx_zyyjjbntmj", "zyjbntmj");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "BZ");
                    CaculValue2(tempFeatLayer, selSQL, "BZ", "cjybz");

                    selSQL = "XXDZ_Z is null or XXDZ_Z=''";
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算2 " + "XXDZ_Z");
                    CaculValue2(tempFeatLayer, selSQL, "XXDZ_Z", "无");

                    try
                    {
                        //单用户住宅---个人姓名  grxm   JBXX_JSZT_GRXM
                        selSQL = ""fwlx"='" + "单户住宅" + "'";
                        //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_JSZT_GRXM");
                        CaculValue2(tempFeatLayer, selSQL, "JBXX_JSZT_GRXM", "grxm");
                    }catch{ }

                   try
                    {
                        //单用户住宅---身份证   sfzh  JBXX_JSZT_ZJHM
                        splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_JSZT_ZJHM");
                        selSQL = ""fwlx"='" + "单户住宅" + "'";
                        CaculValue2(tempFeatLayer, selSQL, "JBXX_JSZT_ZJHM", "sfzh");
                    }catch{}
                    try
                    {
                        //多用户住宅---计算项目名称   xmmc  JBXX_XMMC
                        selSQL = ""fwlx"='" + "多户住宅" + "'";
                        //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_XMMC");
                        CaculValue2(tempFeatLayer, selSQL, "JBXX_XMMC", "xmmc");
                    } catch { }
                    //房屋类型   fwlx    JBXX_FWLX
                    //1 - 单户住宅
                    //2 - 多户住宅
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_FWLX");
                    selSQL = ""fwlx"='" + "单户住宅" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "JBXX_FWLX", 1);

                    selSQL = ""fwlx"='" + "多户住宅" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "JBXX_FWLX", 2);

                    //个人身份 grsf  JBXX_JSZT_GRSF
                    //1:干部
                    //2:中共党员
                    //3:群众
                    selSQL = ""grsf"='" + "干部" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_JSZT_GRSF");
                    CaculValue(tempFeatLayer, selSQL, "JBXX_JSZT_GRSF", 1);

                    selSQL = ""grsf" like '%" + "中共党员" + "%'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "JBXX_JSZT_GRSF", 2);

                    selSQL = ""grsf"='" + "群众" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "JBXX_JSZT_GRSF", 3);

                    //是否本村村民  sfbccm  JBXX_JSZT_SFBCCM
                    //1:本村村民
                    //2:外村村民
                    //3:城镇居民
                    //4:其他
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_JSZT_SFBCCM");
                    foreach (KeyValuePair<string, int> keyValuePair in ModelDataCls.listSFBCCM)
                    {
                        selSQL = ""sfbccm"='" + keyValuePair.Key + "'";
                       //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        CaculValue(tempFeatLayer, selSQL, "JBXX_JSZT_SFBCCM", keyValuePair.Value);
                    }

                    //多户填报---建设单位名称   jsdwmc  JBXX_JSZT_DWMC
                    selSQL = ""fwlx"='" + "多户住宅" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_JSZT_DWMC");
                    CaculValue2(tempFeatLayer, selSQL, "JBXX_JSZT_DWMC", "jsdwmc");

                    //土地主要来源     tdzyly     JBXX_TDZYLY
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_TDZYLY");
                    foreach (KeyValuePair<string, int> keyValuePair in ModelDataCls.listJBXX_TDZYLY)
                    {
                        if (keyValuePair.Key== "集体自营土地")
                        {
                            selSQL = ""tdzyly" like '集体自营%'";
                        }
                        else
                        {
                            selSQL = ""tdzyly"='" + keyValuePair.Key + "'";
                        }
                       //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        CaculValue(tempFeatLayer, selSQL, "JBXX_TDZYLY", keyValuePair.Value);
                    }

                    //
                    ////将老宅基地继承 计算为 其他8
                    //
                    selSQL = "tdzyly='老宅基地继承'";
                    CaculValue(tempFeatLayer, selSQL, "JBXX_TDZYLY", 8);

                    //建房原因  jfyy  JBXX_JFYY
                    //1:分户
                    //2:移民搬迁
                    //3:异地扶贫搬迁
                    //4:地质灾害搬迁
                    //5:生态整治搬迁
                    //6:拆迁安置
                    //7:其他
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_JFYY");
                    foreach (KeyValuePair<string, int> keyValuePair in ModelDataCls.listJFYY)
                    {
                        selSQL = ""jfyy"='" + keyValuePair.Key + "'";
                       //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        CaculValue(tempFeatLayer, selSQL, "JBXX_JFYY", keyValuePair.Value);
                    }

                    //房屋是否出售   fwsfcs   JBXX_FWSFCS
                    //0-否1-部分2-全部
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_FWSFCS");
                    selSQL = ""fwsfcs"='" + "否" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "JBXX_FWSFCS", 0);

                    selSQL = ""fwsfcs"='" + "部分" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "JBXX_FWSFCS", 1);

                    selSQL = ""fwsfcs"='" + "全部" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "JBXX_FWSFCS", 2);

                    //管理信息_项目总占用土地面积 GLXX_ZYDMJ=房屋(项目)占地面积 fwzdmj +附属设施面积 fsssmj
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "GLXX_ZYDMJ");
                    CaculValue4(culFeatLayer, "GLXX_ZYDMJ", "fwzdmj", "fsssmj");

                    //是否符合一户一宅 sffhyhyz GLXX_SFFH_YHYZHFH
                    //单户住宅特有:0-否1-是
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "GLXX_SFFH_YHYZHFH");
                    selSQL = ""sffhyhyz"='" + "否" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_SFFH_YHYZHFH", 0);

                    selSQL = ""sffhyhyz"='" + "是" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_SFFH_YHYZHFH", 1);

                    //一户多宅原因  yhdzyy   GLXX_YHDZYY 
                    //1:不符合分户条件
                    //2:继承
                    //3:建新未拆旧
                    //4:赠予
                    //5:出售后再建
                    //6:购买
                    //7:纯多占
                    //8:其他
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "GLXX_YHDZYY");
                    foreach (KeyValuePair<string, int> keyValuePair in ModelDataCls.listYHDZYY)
                    {
                        selSQL = ""yhdzyy"='" + keyValuePair.Key + "'";
                       //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        CaculValue(tempFeatLayer, selSQL, "GLXX_YHDZYY", keyValuePair.Value);
                    }

                    //用地手续情况    ydsxqk   GLXX_YDSXQK
                    //0 - 无手续
                    //1 - 手续不全
                    //2 - 有手续但不合规
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "GLXX_YDSXQK");
                    selSQL = ""ydsxqk"='" + "无手续" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_YDSXQK", 1);

                    selSQL = ""ydsxqk"='" + "手续不全" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_YDSXQK", 2);

                    selSQL = ""ydsxqk"='" + "有手续但不合规" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_YDSXQK", 3);

                    //没有合法合规用地手续主要原因    wydspyy   GLXX_MYSXYY
                    //1:未申请办理用地手续
                    //2:停批
                    //3:不符合申请条件
                    //4:不符合规划
                    //5:无用地计划指标
                    //6:未缴费
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "GLXX_MYSXYY");
                    foreach (KeyValuePair<string, int> keyValuePair in ModelDataCls.listMYSXYY)
                    {
                        selSQL = ""wydspyy"='" + keyValuePair.Key + "'";
                       //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        CaculValue(tempFeatLayer, selSQL, "GLXX_MYSXYY", keyValuePair.Value);
                    }

                    //占用耕地主要类型   zygdzylx GLXX_ZYGDLX
                    //zygdzylx01
                    //zygdzylx02
                    //zygdzylx03
                    //zygdzylx04
                    //zygdzylx05
                    //zygdzylx06
                    //zygdzylx07
                    //zygdzylx08
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "GLXX_ZYGDLX");
                    foreach (KeyValuePair<string, int> keyValuePair in ModelDataCls.listGLXX_ZYGDLX)
                    {
                        selSQL = ""zygdzylx"='" + keyValuePair.Key + "'";
                       //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        CaculValue(tempFeatLayer, selSQL, "GLXX_ZYGDLX", keyValuePair.Value);
                    }

                    //是否符合城乡(村庄)规划   sffhcxgh  GLXX_SFFH_CXGH
                    //1:未编制规划
                    //2:符合
                    //3:部分符合
                    //4:不符合
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "GLXX_SFFH_CXGH");
                    foreach (KeyValuePair<string, int> keyValuePair in ModelDataCls.listSFFH_CXGH)
                    {
                        selSQL = ""sffhcxgh"='" + keyValuePair.Key + "'";
                       //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        CaculValue(tempFeatLayer, selSQL, "GLXX_SFFH_CXGH", keyValuePair.Value);
                    }

                    //是否符合土地利用总体规划(国土空间规划)情况  sffhtdly   GLXX_SFFH_TDLYGH
                    //0 - 符合
                    //1 - 部分符合
                    //2 - 不符合
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "GLXX_SFFH_TDLYGH");
                    selSQL = ""sffhtdly"='" + "符合" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_SFFH_TDLYGH", 2);

                    selSQL = ""sffhtdly"='" + "部分符合" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_SFFH_TDLYGH", 1);

                    selSQL = ""sffhtdly"='" + "不符合" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_SFFH_TDLYGH", 0);


                    //是否作出行政处罚    sfxzcf   GLXX_SF_XZCF
                    //0 - 否
                    //1 - 是
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "GLXX_SF_XZCF");
                    selSQL = ""sfxzcf"='" + "否" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_SF_XZCF", 0);

                    selSQL = ""sfxzcf"='" + "是" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_SF_XZCF", 1);

                    //是否申请法院强制执行   sfqzzx    GLXX_SF_SQFYQZZX
                    //0 - 否
                    //1 - 是
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "GLXX_SF_SQFYQZZX");
                    selSQL = ""sfqzzx"='" + "否" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_SF_SQFYQZZX", 0);

                    selSQL = ""sfqzzx"='" + "是" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_SF_SQFYQZZX", 1);

                    //法院是否受理    fysfsl   GLXX_SF_FYSL
                    //0 - 否
                    //1 - 是
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "GLXX_SF_FYSL");
                    selSQL = ""fysfsl"='" + "否" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_SF_FYSL", 0);

                    selSQL = ""fysfsl"='" + "是" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_SF_FYSL", 1);
                    #endregion
                }
                //
                //产业类  公共服务类
                //
                if (strSelMB == "产业类" || strSelMB == "公共服务类")
                {
                    #region 
                    string selSQL = String.Empty;
                    //计算---直接等于
                    selSQL = null;
                    IFeatureLayer tempFeatLayer = culFeatLayer;
                    //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "CITY_NAME");
                    CaculValue2(tempFeatLayer, selSQL, "CITY_NAME", "shi");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "XZQMC_XQ");
                    CaculValue2(tempFeatLayer, selSQL, "XZQMC_XQ", "xian");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "XZQMC_XZ");
                    CaculValue2(tempFeatLayer, selSQL, "XZQMC_XZ", "xiang");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "XZQMC_CUN");
                    CaculValue2(tempFeatLayer, selSQL, "XZQMC_CUN", "cun");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "XXDZ_Z");
                    CaculValue2(tempFeatLayer, selSQL, "XXDZ_Z", "zu");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "XXDZ_MPH");
                    CaculValue2(tempFeatLayer, selSQL, "XXDZ_MPH", "mph");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_XMMC");
                    CaculValue2(tempFeatLayer, selSQL, "JBXX_XMMC", "xmmc");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_JSZTMC");
                    CaculValue2(tempFeatLayer, selSQL, "JBXX_JSZTMC", "jsztmc");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_KGSJ");
                    CaculValue2(tempFeatLayer, selSQL, "JBXX_KGSJ", "kgsj");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "glxx_zydmj");
                    CaculValue3(tempFeatLayer, selSQL, "glxx_zydmj", "fwzdmj");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "glxx_zygdmj");
                    CaculValue3(tempFeatLayer, selSQL, "glxx_zygdmj", "zygdmj");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "glxx_zyyjjbntmj");
                    CaculValue3(tempFeatLayer, selSQL, "glxx_zyyjjbntmj", "zyjbntmj");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "BZ");
                    CaculValue2(tempFeatLayer, selSQL, "BZ", "cjybz");


                    //房屋主要用途    fwzyyt   JBXX_FWYT
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_FWYT");
                    foreach (KeyValuePair<string, int> keyValuePair in ModelDataCls.listJBXX_FWYT)
                    {
                        selSQL = ""fwzyyt"='" + keyValuePair.Key + "'";
                       //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        CaculValue(tempFeatLayer, selSQL, "JBXX_FWYT", keyValuePair.Value);
                    }

                    //建设主体性质    jsztxz    JBXX_JSZTXZ
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_JSZTXZ");
                    foreach (KeyValuePair<string, int> keyValuePair in ModelDataCls.listJBXX_JSZTXZ)
                    {
                        selSQL = ""jsztxz"='" + keyValuePair.Key + "'";
                       //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        CaculValue(tempFeatLayer, selSQL, "JBXX_JSZTXZ", keyValuePair.Value);
                    }

                    //土地主要来源     tdzyly     JBXX_TDZYLY
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_TDZYLY");
                    foreach (KeyValuePair<string, int> keyValuePair in ModelDataCls.listJBXX_TDZYLY)
                    {
                        selSQL = ""tdzyly"='" + keyValuePair.Key + "'";
                       //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        CaculValue(tempFeatLayer, selSQL, "JBXX_TDZYLY", keyValuePair.Value);
                    }

                    //是否扶贫项目   sffp   JBXX_SF_FPXM
                    //0 - 否
                    //1 - 是
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_SF_FPXM");
                    selSQL = ""sffp"='" + "否" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "JBXX_SF_FPXM", 0);

                    selSQL = ""sffp"='" + "是" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "JBXX_SF_FPXM", 1);

                    //是否上级部门有明确要求  sfsjmqyq    JBXX_SF_SJBMYQ
                    //0 - 否
                    //1 - 是
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_SF_SJBMYQ");
                    selSQL = ""sfsjmqyq"='" + "否" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "JBXX_SF_SJBMYQ", 0);

                    selSQL = ""sfsjmqyq"='" + "是" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "JBXX_SF_SJBMYQ", 1);


                    //
                    //JBXX_BMMC
                    //
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_BMMC");
                    foreach (KeyValuePair<string, int> keyValuePair in ModelDataCls.listBMMCY)
                    {
                        selSQL = ""bmmc"='" + keyValuePair.Key + "'";
                        //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        CaculValue(tempFeatLayer, selSQL, "JBXX_BMMC", keyValuePair.Value);
                    }


                    //与本村农产品生产、加工销售等是否直接相关--- 产业类特有  ybcncp JBXX_SFZJXG_NCP
                    //0 - 否
                    //1 - 是
                    if (strSelMB == "产业类")
                    {
                        splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_SFZJXG_NCP");
                        selSQL = ""ybcncp"='" + "否" + "'";
                       //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        CaculValue(tempFeatLayer, selSQL, "JBXX_SFZJXG_NCP", 0);

                        selSQL = ""ybcncp"='" + "是" + "'";
                       //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        CaculValue(tempFeatLayer, selSQL, "JBXX_SFZJXG_NCP", 1);
                    }
                    //利用情况 lyqk  JBXX_LYQK--------公共服务类特有
                    //1:闲置
                    //2:很少使用
                    //3:经常使用
                    if (strSelMB == "公共服务类")
                    {
                        splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "JBXX_LYQK");
                        selSQL = ""lyqk"='" + "闲置" + "'";
                       //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        CaculValue(tempFeatLayer, selSQL, "JBXX_LYQK", 1);

                        selSQL = ""lyqk"='" + "很少使用" + "'";
                       //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        CaculValue(tempFeatLayer, selSQL, "JBXX_LYQK", 2);

                        selSQL = ""lyqk"='" + "经常使用" + "'";
                       //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        CaculValue(tempFeatLayer, selSQL, "JBXX_LYQK", 3);
                    }

                    //----------------------------管理信息--------------------------------------------------
                    //占用耕地主要类型   zygdzylx GLXX_ZYGDLX
                    //zygdzylx01
                    //zygdzylx02
                    //zygdzylx03
                    //zygdzylx04
                    //zygdzylx05
                    //zygdzylx06
                    //zygdzylx07
                    //zygdzylx08
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "GLXX_ZYGDLX");
                    foreach (KeyValuePair<string, int> keyValuePair in ModelDataCls.listGLXX_ZYGDLX)
                    {
                        selSQL = ""zygdzylx"='" + keyValuePair.Key + "'";
                       //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        CaculValue(tempFeatLayer, selSQL, "GLXX_ZYGDLX", keyValuePair.Value);
                    }

                    //是否符合城乡(村庄)规划   sffhcxgh  GLXX_SFFH_CXGH
                    //1:未编制规划
                    //2:符合
                    //3:部分符合
                    //4:不符合
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "GLXX_SFFH_CXGH");
                    foreach (KeyValuePair<string, int> keyValuePair in ModelDataCls.listSFFH_CXGH)
                    {
                        selSQL = ""sffhcxgh"='" + keyValuePair.Key + "'";
                       //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        CaculValue(tempFeatLayer, selSQL, "GLXX_SFFH_CXGH", keyValuePair.Value);
                    }

                    //是否符合土地利用总体规划(国土空间规划)情况  sffhtdly   GLXX_SFFH_TDLYGH
                    //0 - 符合
                    //1 - 部分符合
                    //2 - 不符合
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "GLXX_SFFH_TDLYGH");
                    selSQL = ""sffhtdly"='" + "符合" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_SFFH_TDLYGH", 0);

                    selSQL = ""sffhtdly"='" + "部分符合" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_SFFH_TDLYGH", 1);

                    selSQL = ""sffhtdly"='" + "不符合" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_SFFH_TDLYGH", 2);

                    //用地手续情况    ydsxqk   GLXX_YDSXQK
                    //1 - 无手续
                    //2 - 手续不全
                    //3 - 有手续但不合规
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "GLXX_YDSXQK");
                    selSQL = ""ydsxqk"='" + "无手续" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_YDSXQK", 1);

                    selSQL = ""ydsxqk"='" + "手续不全" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_YDSXQK", 2);

                    selSQL = ""ydsxqk"='" + "有手续但不合规" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_YDSXQK", 3);

                    //没有合法合规用地手续主要原因    wydspyy   GLXX_MYSXYY
                    //1:未申请办理用地手续
                    //2:停批
                    //3:不符合申请条件
                    //4:不符合规划
                    //5:无用地计划指标
                    //6:未缴费
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "GLXX_MYSXYY");
                    foreach (KeyValuePair<string, int> keyValuePair in ModelDataCls.listMYSXYY)
                    {
                        selSQL = ""wydspyy"='" + keyValuePair.Key + "'";
                       //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                        CaculValue(tempFeatLayer, selSQL, "GLXX_MYSXYY", keyValuePair.Value);
                    }

                    //是否作出行政处罚    sfxzcf   GLXX_SF_XZCF
                    //0 - 否
                    //1 - 是
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "GLXX_SF_XZCF");
                    selSQL = ""sfxzcf"='" + "否" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_SF_XZCF", 0);

                    selSQL = ""sfxzcf"='" + "是" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_SF_XZCF", 1);

                    //是否申请法院强制执行   sfqzzx    GLXX_SF_SQFYQZZX
                    //0 - 否
                    //1 - 是
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "GLXX_SF_SQFYQZZX");
                    selSQL = ""sfqzzx"='" + "否" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_SF_SQFYQZZX", 0);

                    selSQL = ""sfqzzx"='" + "是" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_SF_SQFYQZZX", 1);

                    //法院是否受理    fysfsl   GLXX_SF_FYSL
                    //0 - 否
                    //1 - 是
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "GLXX_SF_FYSL");
                    selSQL = ""fysfsl"='" + "否" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_SF_FYSL", 0);

                    selSQL = ""fysfsl"='" + "是" + "'";
                   //tempFeatLayer = SelectFeatureLyByAttribute(culFeatLayer, selSQL);
                    CaculValue(tempFeatLayer, selSQL, "GLXX_SF_FYSL", 1);
                    #endregion

                    
                }
                splashScreenManager1.SetWaitFormCaption("正在计算 " + strSelMB + " 根据名称计算代码");
                splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "city"); //city_name
                CaculValueGetCodeByNameShi(culFeatLayer, null, "city_name", "city");

                splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "xzqdm_xq");
                CaculValueGetCodeByNameQuXian(culFeatLayer, null, "xzqmc_xq", "xzqdm_xq");

                //计算乡镇代码
                splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "xzqdm_xz");
                CaculValueGetCodeByNameXiang(culFeatLayer, null, "xzqmc_xz", "xzqdm_xz");


                splashScreenManager1.SetWaitFormCaption("正在计算" + strSelMB);
                splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "province_name"); //city_name
                CaculValue(culFeatLayer, null, "province_name", "贵州省");
                splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "province"); //city_name
                CaculValue(culFeatLayer, null, "province", "520000");


                splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "collect_type"); //collect_type
                //计算collect_type
                string strFeatureLys = culFeatLayer.FeatureClass.AliasName;
                if (strFeatureLys.Contains("住宅类"))
                {
                    CaculValue(culFeatLayer, null, "collect_type", "Z");
                }else if (strFeatureLys.Contains("产业类"))
                {
                    CaculValue(culFeatLayer, null, "collect_type", "C");
                }else if (strFeatureLys.Contains("公共服务类"))
                {
                    CaculValue(culFeatLayer, null, "collect_type", "G");
                }
                splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "id"); //collect_type
                CaculValue2(culFeatLayer, null, "id", "fwbh");

                DateTime dtEnd = DateTime.Now;
                TimeSpan dtDiff = dateDiff(dtStart, dtEnd);
                tlSProgressBar.Value = 0;
                splashScreenManager1.CloseWaitForm();
                MessageBox.Show("计算完成! 耗时("+ dtDiff + ")", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                //MessageBox.Show("检查完成! 检查结果存放在矢量数据的CheckResult字段里", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            /// <summary>
            /// 属性数据预览
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void ts_BTNAttribute_Click(object sender, EventArgs e)
            {
                if (culFeatLayer == null)
                {
                    MessageBox.Show("请先打开或选择数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                //FormAttribute formAttribute = new FormAttribute(culFeatLayer);
                splashScreenManager1.ShowWaitForm();
                splashScreenManager1.SetWaitFormCaption("正在执行  打开属性表");
                splashScreenManager1.SetWaitFormDescription("请耐心等待...数据加载中");
                FormAttribute formAttribute = FormAttribute.getFormFunc(culFeatLayer);
                splashScreenManager1.CloseWaitForm();
                formAttribute.Text = "违法占耕辅助处理软件-" +culFeatLayer.FeatureClass.AliasName+"-属性预览";
                formAttribute.Show();
            }

            /// <summary>
            /// 获取时间差
            /// </summary>
            /// <param name="dtStart"></param>
            /// <param name="dtEnd"></param>
            /// <returns></returns>
            private TimeSpan dateDiff(DateTime dtStart,DateTime dtEnd)
            {
                TimeSpan tsStart = new TimeSpan(dtStart.Ticks);
                TimeSpan tsEnd = new TimeSpan(dtEnd.Ticks);
                TimeSpan ts = tsEnd.Subtract(tsStart).Duration();
                //int dateDiffSecond = ts.Days * 24 * 60 * 60 + ts.Hours * 60 * 60 + ts.Minutes * 60 + ts.Seconds;
                return ts;
            }
            /// <summary>
            /// 根据属性选择要素
            /// </summary>
            /// <param name="culFeatLayer"></param>
            /// <param name="selSQL"></param>
            /// <returns></returns>
            private IFeatureLayer SelectFeatureLyByAttribute(IFeatureLayer culFeatLayer, string selSQL)
            {
                // ISSUE: variable of a compiler-generated type
                IFeatureSelection featureSelection = culFeatLayer as IFeatureSelection;
                // ISSUE: variable of a compiler-generated type
                IQueryFilter Filter = (IQueryFilter)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("FDFEBD95-ED75-11D0-9A95-080009EC734B")));
                Filter.WhereClause = selSQL;
                // ISSUE: reference to a compiler-generated method
                featureSelection.SelectFeatures(Filter, esriSelectionResultEnum.esriSelectionResultNew, false);
                // ISSUE: variable of a compiler-generated type
                IFeatureLayer featureLayer = culFeatLayer;
                return featureLayer;
            }

            /// <summary>
            /// 属性计算--赋值int
            /// </summary>
            /// <param name="culFeatLayer"></param>
            /// <param name="FieldName"></param>
            /// <param name="value"></param>
            private void CaculValue(IFeatureLayer culFeatLayer, string strSQL, string FieldName, int myvalue)
            {
                IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = strSQL;
                pQueryFilter.SubFields = FieldName;
                int field = culFeatLayer.FeatureClass.FindField(FieldName);
                ITable table = culFeatLayer.FeatureClass as ITable;
                IRowBuffer pBuffer = table.CreateRowBuffer();
                pBuffer.Value[field] = myvalue;
                table.UpdateSearchedRows(pQueryFilter, pBuffer);
                Marshal.ReleaseComObject(pQueryFilter);
            }
            private void CaculValueGetCodeByNameXiang(IFeatureLayer culFeatLayer, string strSQL, string strNameField,string strCodeField)
            {
                ITable table = culFeatLayer.FeatureClass as ITable;
                IQueryFilter pQueryFilter = (IQueryFilter)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("FDFEBD95-ED75-11D0-9A95-080009EC734B")));
                //IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = strSQL;
                // pQueryFilter.SubFields = caculFieldName;
                ICursor cursor = table.Update(pQueryFilter, false);
                ESRI.ArcGIS.Geodatabase.IRow Row = cursor.NextRow();
                if (Row == null)
                    return;
                int field = Row.Fields.FindField(strNameField);
                int field2 = Row.Fields.FindField(strCodeField);
                int fieldXQ= Row.Fields.FindField("xzqmc_xq");
                int maxCount = table.RowCount(pQueryFilter);
                tlSProgressBar.Minimum = 0;
                tlSProgressBar.Maximum = maxCount;
                string Connstr = SQliteHelperCls.CustomerConnStr(SQliteHelperCls.strDBPath);

                for (int i = 0; i < maxCount; i++)
                {
                    // Row.set_Value(field, Row.get_Value(field2));
                    //object a1 = Row.Value[field];
                    //object a2 = Row.Value[field2];
                    tlSProgressBar.Value = i;
                    try
                    {

                        string calValue = Row.Value[field].ToString();
                        string culXQName = Row.Value[fieldXQ].ToString();
                        string strdbSQL = "select 乡镇代码 from 乡镇代码名称 where 乡镇名称='"+ calValue + "' and 县区名称='"+ culXQName + "'";

                        object tempcode= SQliteHelperCls.ExecuteScalar(strdbSQL, Connstr);

                        Row.Value[field2] = tempcode.ToString();
                        cursor.UpdateRow(Row);
                        Console.WriteLine(i);
                    }
                    catch(Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                    Row = cursor.NextRow();
                }
                Marshal.ReleaseComObject(pQueryFilter);
                tlSProgressBar.Value =0;
            }
            private void CaculValueGetCodeByNameQuXian(IFeatureLayer culFeatLayer, string strSQL, string strNameField, string strCodeField)
            {
                ITable table = culFeatLayer.FeatureClass as ITable;
                IQueryFilter pQueryFilter = (IQueryFilter)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("FDFEBD95-ED75-11D0-9A95-080009EC734B")));
                //IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = strSQL;
                // pQueryFilter.SubFields = caculFieldName;
                ICursor cursor = table.Update(pQueryFilter, false);
                ESRI.ArcGIS.Geodatabase.IRow Row = cursor.NextRow();
                if (Row == null)
                    return;
                int field = Row.Fields.FindField(strNameField);
                int field2 = Row.Fields.FindField(strCodeField);
                int maxCount = table.RowCount(pQueryFilter);
                tlSProgressBar.Minimum = 0;
                tlSProgressBar.Maximum = maxCount;
                string Connstr = SQliteHelperCls.CustomerConnStr(SQliteHelperCls.strDBPath);

                for (int i = 0; i < maxCount; i++)
                {
                    // Row.set_Value(field, Row.get_Value(field2));
                    //object a1 = Row.Value[field];
                    //object a2 = Row.Value[field2];
                    tlSProgressBar.Value = i;
                    try
                    {

                        string calValue = Row.Value[field].ToString();
                        string strdbSQL = "select 县区代码 from 县区代码名称 where 县区名称='"+ calValue+"'";

                        object tempcode = SQliteHelperCls.ExecuteScalar(strdbSQL, Connstr);
                        Row.Value[field2] = tempcode.ToString();
                        cursor.UpdateRow(Row);
                        Console.WriteLine(i);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                    Row = cursor.NextRow();
                }
                Marshal.ReleaseComObject(pQueryFilter);
            }

            private void CaculValueGetCodeByNameShi(IFeatureLayer culFeatLayer, string strSQL, string strNameField, string strCodeField)
            {
                ITable table = culFeatLayer.FeatureClass as ITable;
                IQueryFilter pQueryFilter = (IQueryFilter)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("FDFEBD95-ED75-11D0-9A95-080009EC734B")));
                //IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = strSQL;
                // pQueryFilter.SubFields = caculFieldName;
                ICursor cursor = table.Update(pQueryFilter, false);
                ESRI.ArcGIS.Geodatabase.IRow Row = cursor.NextRow();
                if (Row == null)
                    return;
                int field = Row.Fields.FindField(strNameField);
                int field2 = Row.Fields.FindField(strCodeField);
                int maxCount = table.RowCount(pQueryFilter);
                tlSProgressBar.Minimum = 0;
                tlSProgressBar.Maximum = maxCount;
                string Connstr = SQliteHelperCls.CustomerConnStr(SQliteHelperCls.strDBPath);

                for (int i = 0; i < maxCount; i++)
                {
                    // Row.set_Value(field, Row.get_Value(field2));
                    //object a1 = Row.Value[field];
                    //object a2 = Row.Value[field2];
                    tlSProgressBar.Value = i;
                    try
                    {

                        string calValue = Row.Value[field].ToString();
                        string strdbSQL = "select 市州代码 from 市州代码名称 where 市州名称= '"+ calValue+"'";

                        object tempcode = SQliteHelperCls.ExecuteScalar(strdbSQL, Connstr);
                        Row.Value[field2] = tempcode.ToString()+"00";
                        cursor.UpdateRow(Row);
                        Console.WriteLine(i);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                    Row = cursor.NextRow();
                }
                Marshal.ReleaseComObject(pQueryFilter);
            }
            /// <summary>
            /// 属性计算--赋值object
            /// </summary>
            /// <param name="culFeatLayer"></param>
            /// <param name="FieldName"></param>
            /// <param name="value"></param>
            private void CaculValue(IFeatureLayer culFeatLayer, string strSQL, string FieldName, object myvalue)
            {
                IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = strSQL;
                pQueryFilter.SubFields = FieldName;
                int field = culFeatLayer.FeatureClass.FindField(FieldName);
                ITable table = culFeatLayer.FeatureClass as ITable;
                IRowBuffer pBuffer = table.CreateRowBuffer();
                pBuffer.Value[field] = myvalue;
                table.UpdateSearchedRows(pQueryFilter, pBuffer);
                Marshal.ReleaseComObject(pQueryFilter);
            }
            /// <summary>
            /// 属性计算----直接等于  String
            /// </summary>
            /// <param name="culFeatLayer"></param>
            /// <param name="strSQL"></param>
            /// <param name="caculFieldName"></param>
            /// <param name="strFieldName"></param>
            private void CaculValue2(IFeatureLayer culFeatLayer,string strSQL, string caculFieldName, string strFieldName)
            {
                ITable table = culFeatLayer.FeatureClass as ITable;
                IQueryFilter pQueryFilter = (IQueryFilter)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("FDFEBD95-ED75-11D0-9A95-080009EC734B")));
                //IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = strSQL;
               // pQueryFilter.SubFields = caculFieldName;

                ICursor cursor = table.Update(pQueryFilter, false);
                ESRI.ArcGIS.Geodatabase.IRow Row = cursor.NextRow();
                if (Row == null)
                    return;
                int field = Row.Fields.FindField(caculFieldName);
                int field2 = Row.Fields.FindField(strFieldName);
                int maxCount = table.RowCount(pQueryFilter);
                tlSProgressBar.Minimum = 0;
                tlSProgressBar.Maximum = maxCount;
                for (int i = 0; i < maxCount; i++)
                {
                    // Row.set_Value(field, Row.get_Value(field2));
                    //object a1 = Row.Value[field];
                    //object a2 = Row.Value[field2];
                    tlSProgressBar.Value = i;
                    try
                    {
                        dynamic calValue = Row.Value[field2];
                        Row.Value[field] = calValue;
                        cursor.UpdateRow(Row);
                        Console.WriteLine(i);
                    }
                    catch { }
                    Row = cursor.NextRow();
                }
                Marshal.ReleaseComObject(pQueryFilter);
            }

            /// <summary>
            /// 属性计算----直接等于  double
            /// </summary>
            /// <param name="culFeatLayer"></param>
            /// <param name="caculFieldName"></param>
            /// <param name="strFieldName"></param>
            private void CaculValue3(IFeatureLayer culFeatLayer, string strSQL, string caculFieldName, string strFieldName)
            {
                ITable table = culFeatLayer.FeatureClass as ITable;
                IQueryFilter pQueryFilter = (IQueryFilter)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("FDFEBD95-ED75-11D0-9A95-080009EC734B")));
                //IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = strSQL;
               // QueryFilter.SubFields = caculFieldName;
                ICursor cursor = table.Update(pQueryFilter, false);
                ESRI.ArcGIS.Geodatabase.IRow Row = cursor.NextRow();
                if (Row == null)
                    return;
                tlSProgressBar.Minimum = 0;
                tlSProgressBar.Maximum = table.RowCount(pQueryFilter);
                int field = Row.Fields.FindField(caculFieldName);
                int field2 = Row.Fields.FindField(strFieldName);
                for (int i = 0; i < table.RowCount(pQueryFilter); i++)
                {
                    tlSProgressBar.Value = i;
                    try
                    {
                        // Row.set_Value(field, Row.get_Value(field2));
                        Row.Value[field] = Row.Value[field2];
                        cursor.UpdateRow(Row);
                        Row = cursor.NextRow();
                    }
                    catch{}
                }
                Marshal.ReleaseComObject(pQueryFilter);
            }


            /// <summary>
            /// 属性计算----住宅类面积相加
            /// </summary>
            /// <param name="culFeatLayer"></param>
            /// <param name="caculFieldName"></param>
            /// <param name="strFieldName"></param>
            private void CaculValue4(IFeatureLayer culFeatLayer,  string caculFieldName, string strFWMJ,string strFSSSMJ)
            {
                ITable table = culFeatLayer.FeatureClass as ITable;
                IQueryFilter pQueryFilter = (IQueryFilter)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("FDFEBD95-ED75-11D0-9A95-080009EC734B")));
                //IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = null;
               // QueryFilter.SubFields = caculFieldName;
                ICursor cursor = table.Update(pQueryFilter, false);
                ESRI.ArcGIS.Geodatabase.IRow Row = cursor.NextRow();
                if (Row == null)
                    return;

                int field = Row.Fields.FindField(caculFieldName);
                int field2 = Row.Fields.FindField(strFWMJ);
                int field3 = Row.Fields.FindField(strFSSSMJ);

                tlSProgressBar.Minimum = 0;
                tlSProgressBar.Maximum = table.RowCount(pQueryFilter);
                for (int i = 0; i < table.RowCount(pQueryFilter); i++)
                {
                    tlSProgressBar.Value = i;
                    try
                    {
                        // Row.set_Value(field, Row.get_Value(field2));
                        double fwmj=(double) Row.Value[field2];
                        double fsssmj= (double)Row.Value[field3];
                        Row.Value[field] = fwmj+ fsssmj;
                        cursor.UpdateRow(Row);
                        Row = cursor.NextRow();
                    }
                    catch { }
                }
                Marshal.ReleaseComObject(pQueryFilter);
            }

            private IFeatureCursor GetSelectedFeature(IFeatureLayer featureLayer)
            {
                try
                {
                    if (featureLayer == null)
                    {
                        // ISSUE: variable of a compiler-generated type
                        IFeatureCursor featureCursor = (IFeatureCursor)null;
                        return featureCursor;
                    }
                    // ISSUE: variable of a compiler-generated type
                    IFeatureSelection featureSelection = (IFeatureSelection)featureLayer;
                    // ISSUE: variable of a compiler-generated type
                    ISelectionSet selectionSet = featureSelection.SelectionSet;
                    if (selectionSet.Count == 0)
                    {
                        // ISSUE: variable of a compiler-generated type
                        IFeatureCursor featureCursor = (IFeatureCursor)null;
                        return featureCursor;
                    }
                    // ISSUE: variable of a compiler-generated type
                    ICursor Cursor;
                    // ISSUE: reference to a compiler-generated method
                    selectionSet.Search((IQueryFilter)null, false, out Cursor);
                    // ISSUE: variable of a compiler-generated type
                    IFeatureCursor featureCursor1 = (IFeatureCursor)Cursor;
                    return featureCursor1;
                }
                catch (Exception ex)
                {
                    int num = (int)MessageBox.Show("选择要素失败!", "警告");
                    // ISSUE: variable of a compiler-generated type
                    IFeatureCursor featureCursor = (IFeatureCursor)null;
                    return featureCursor;
                }
            }

            /// <summary>
            /// 转换前检查的GDB
            /// </summary>
            private string strZHQSelGDBPath = null;
            /// <summary>
            ///  转换前检查-加载数据
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btn_unck_OpenData_Click(object sender, EventArgs e)
            {
                listBox_unck_FtLy.Items.Clear();
                tspCombx_unck_SFZ.Items.Clear();
                tspCombx_unck_SFZ.SelectedItem = null;
                MyFolderBrowserDialog mfbd = new MyFolderBrowserDialog();
                if (mfbd.ShowDialog(this) == DialogResult.OK)
                {
                    listFLayerZHQ_Check = new List<IFeatureLayer>();
                    
                    string strGDB_Path = mfbd.DirectoryPath;
                    strZHQSelGDBPath = mfbd.DirectoryPath;
                    FileGDBWorkspaceFactory fac = new FileGDBWorkspaceFactory();
                    IFeatureWorkspace pFtWS = (IFeatureWorkspace)fac.OpenFromFile(strGDB_Path, 0);
                    IWorkspace pWork = (IWorkspace)pFtWS;
                    IEnumDataset pEnumDs = pWork.get_Datasets(esriDatasetType.esriDTFeatureClass);
                    IDataset pDs = pEnumDs.Next();
                    axMapControl1.Map.ClearLayers();
                    tslbStatus.Text = "正在加载要素...";
                    statusStrip1.Refresh();
                    while (pDs != null)
                    {
                        IFeatureClass temp = pDs as IFeatureClass;
                        IFeatureLayer tempLayer = new FeatureLayer();
                        tempLayer.FeatureClass = temp;
                        tempLayer.Name = tempLayer.FeatureClass.AliasName;
                        listFLayerZHQ_Check.Add(tempLayer);
                        listBox_unck_FtLy.Items.Add(tempLayer.FeatureClass.AliasName);
                        tspCombx_unck_SFZ.Items.Add(tempLayer.FeatureClass.AliasName);
                        pDs = pEnumDs.Next();
                    }
                    tslbStatus.Text = "加载完成!";
                    tlSpStLb.Text = "  选项:转换前属性质量检查  当前数据库:" + strGDB_Path;
                    //tlSpStLb.Text += "  当前数据库:" + Path.GetFileName(strGDB_Path);
                    statusStrip1.Refresh();
                }
            }

            /// <summary>
            /// 检查乡镇名称是否存在
            /// </summary>
            /// <param name="tempFtLy"></param>
            /// <param name="strSQL"></param>
            /// <param name="strSaveField"></param>
            private void CheckUnStandardXiang(IFeatureLayer tempFtLy,string strSQL, string strSaveField)
            {
                ITable table = tempFtLy.FeatureClass as ITable;
                IQueryFilter pQueryFilter = (IQueryFilter)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("FDFEBD95-ED75-11D0-9A95-080009EC734B")));
                //IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = strSQL;
                // pQueryFilter.SubFields = caculFieldName;
                ICursor cursor = table.Update(pQueryFilter, false);
                ESRI.ArcGIS.Geodatabase.IRow Row = cursor.NextRow();
                if (Row == null)
                    return;
                int fieldXZ = Row.Fields.FindField("xiang");//乡镇名称字段
                int fieldXQ = Row.Fields.FindField("xian");//县区名称字段
                int fieldSave = Row.Fields.FindField(strSaveField);//保存字段
                int maxCount = table.RowCount(pQueryFilter);
                tlSProgressBar.Minimum = 0;
                tlSProgressBar.Maximum = maxCount;

                string Connstr = SQliteHelperCls.CustomerConnStr(SQliteHelperCls.strDBPath);
                //string strSQL = "Select 乡镇名称 from 乡镇代码名称 where 县区名称='息烽县'";
                for (int i = 0; i < maxCount; i++)
                {
                    tlSProgressBar.Value = i;
                    string strXZName = Row.Value[fieldXZ].ToString();
                    bool isChinaCode=  CheckIsChineseCode.isLegalChinaCode(strXZName);
                    if(!isChinaCode)
                    {
                        Row.Value[fieldSave] = Row.Value[fieldSave].ToString()+";"+"非标准乡镇名;";
                        cursor.UpdateRow(Row);
                    }
                    else
                    {
                        string strSQLiteSQL = "Select 乡镇名称 from 乡镇代码名称 where 县区名称='" + Row.Value[fieldXQ].ToString() + "' and 乡镇名称='" + Row.Value[fieldXZ].ToString() + "'";

                        using (SQLiteConnection SqlConn = new SQLiteConnection(Connstr))
                        {
                            using (SQLiteCommand SqlCmd = new SQLiteCommand(strSQLiteSQL, SqlConn))
                            {
                                SqlConn.Open();
                                SQLiteDataReader reader = SqlCmd.ExecuteReader(CommandBehavior.CloseConnection);
                                if (reader.HasRows==false)
                                {
                                    Row.Value[fieldSave] = Row.Value[fieldSave].ToString() + ";" + "非标准乡镇名;";
                                    cursor.UpdateRow(Row);
                                }
                            }
                        }
                    }
                    Row = cursor.NextRow();
                }
            }
            //执行检查  eg名称(单户住宅类、多户住宅类、产业类、公共服务类)
            /// <summary>
            /// 转换前检查--执行检查
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btn_unck_Excute_Click(object sender, EventArgs e)
            {
                unck_ExcuteFunc(null, false);
            }


            /// <summary>
            /// 转换前检查
            /// </summary>
            /// <param name="culContextFtLy"></param>
            /// <param name="isSingelCheck"></param>
            private void unck_ExcuteFunc(IFeatureLayer culContextFtLy,bool isSingelCheck)
            {
                if (listFLayerZHQ_Check == null)
                {
                    MessageBox.Show("没有数据可查!请先打开数据", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                DateTime dtStart = DateTime.Now;

                splashScreenManager1.ShowWaitForm();
                splashScreenManager1.SetWaitFormCaption("执行检查");
                splashScreenManager1.SetWaitFormDescription("请耐心等待...");

                for (int i = 0; i < listFLayerZHQ_Check.Count; i++)
                {
                    string strTxtPathes = String.Empty;
                    string selSQL = String.Empty;

                    //string strTxtPathes = Directory.GetCurrentDirectory() + "\检查项\转换前检查"; 
                    IFeatureLayer pFeatureLayer = listFLayerZHQ_Check[i];
                    string strFyLyName = pFeatureLayer.FeatureClass.AliasName;//要素类名称

                    if (isSingelCheck == true)
                    {
                        if (culContextFtLy.FeatureClass.AliasName != strFyLyName)
                        {
                            continue;
                        }
                    }

                    listBox_unck_FtLy.SelectedValue = strFyLyName;
                    listBox_unck_FtLy.Refresh();
                    if (strFyLyName != "单户住宅类" && strFyLyName != "多户住宅类" && strFyLyName != "产业类" && strFyLyName != "公共服务类")
                    {
                        continue;
                    }
                    splashScreenManager1.SetWaitFormDescription("请耐心等待... " + strFyLyName + " 初始化检查");
                    initValue(pFeatureLayer);

                    string strSetTxtPath = "";//保存检查项的TXT路径
                    if (strFyLyName == "单户住宅类")
                    {
                        strTxtPathes = Directory.GetCurrentDirectory() + "\检查项\转换前检查\单户住宅类";
                        strSetTxtPath = System.IO.Directory.GetCurrentDirectory() + "\checksettings\danhzzlSet.txt";

                        if (Convert.ToBoolean(XmlCls.ReadXml(XmlCls.strSettingsInfoXML, "SetCheck_grxm")))
                        {
                            splashScreenManager1.SetWaitFormDescription("检查 单户住宅类 是否含非法字符" + "之个人姓名");
                            CkeckDataFunc(pFeatureLayer, null, "grxm", "grxm含非法字符");
                        }
                        if (Convert.ToBoolean(XmlCls.ReadXml(XmlCls.strSettingsInfoXML, "SetCheck_cs")))
                        {
                            splashScreenManager1.SetWaitFormDescription("检查 单户住宅类 cs异常值检查");
                            selSQL = "cs<>'0' and cs<>'' and cs is not null";
                            CheckCSFunc(pFeatureLayer, selSQL);
                        }

                    }
                    else if (strFyLyName == "多户住宅类")
                    {
                        strSetTxtPath = System.IO.Directory.GetCurrentDirectory() + "\checksettings\duohzzlSet.txt";
                        strTxtPathes = Directory.GetCurrentDirectory() + "\检查项\转换前检查\多户住宅类";
                    }
                    else if (strFyLyName == "产业类")
                    {
                        strSetTxtPath = System.IO.Directory.GetCurrentDirectory() + "\checksettings\cylSet.txt";
                        strTxtPathes = Directory.GetCurrentDirectory() + "\检查项\转换前检查\产业类";
                    }
                    else if (strFyLyName == "公共服务类")
                    {
                        strSetTxtPath = System.IO.Directory.GetCurrentDirectory() + "\checksettings\ggfwlSet.txt";
                        strTxtPathes = Directory.GetCurrentDirectory() + "\检查项\转换前检查\公共服务类";
                    }

                    if (Convert.ToBoolean(XmlCls.ReadXml(XmlCls.strSettingsInfoXML, "SetCheck_xian")))
                    {
                        splashScreenManager1.SetWaitFormDescription("检查 " + strFyLyName + " 是否含非法字符之xian");
                        CkeckDataFunc(pFeatureLayer, null, "xian", "xian含非法字符");
                    }

                    if (Convert.ToBoolean(XmlCls.ReadXml(XmlCls.strSettingsInfoXML, "SetCheck_xiang")))
                    {
                        splashScreenManager1.SetWaitFormDescription("检查  " + strFyLyName + " 是否含非法字符之xiang");
                        CkeckDataFunc(pFeatureLayer, null, "xiang", "xiang含非法字符");
                    }

                    if (Convert.ToBoolean(XmlCls.ReadXml(XmlCls.strSettingsInfoXML, "SetCheck_cun")))
                    {
                        splashScreenManager1.SetWaitFormDescription("检查 " + strFyLyName + " 是否含非法字符之cun");
                        CkeckDataFunc(pFeatureLayer, null, "cun", "cun含非法字符");
                    }


                    //SetCheck_zu
                    if (Convert.ToBoolean(XmlCls.ReadXml(XmlCls.strSettingsInfoXML, "SetCheck_zu")))
                    {
                        splashScreenManager1.SetWaitFormDescription("检查 " + strFyLyName + " 是否含非法字符之zu");
                        selSQL = "zu <>'' and zu is not null";
                        CkeckIllegalCharFunc(pFeatureLayer, selSQL, "zu", "zu含非法字符");
                    }
                       

                    if (Convert.ToBoolean(XmlCls.ReadXml(XmlCls.strSettingsInfoXML, "SetCheck_xzName")))
                    {
                        splashScreenManager1.SetWaitFormDescription("检查 " + strFyLyName + " 非标准乡镇名称");
                        //检查非标准乡镇名称
                        CheckUnStandardXiang(pFeatureLayer, null, "CheckResult");
                    }

                    //
                    //检查开工时间值域
                    //
                    if (Convert.ToBoolean(XmlCls.ReadXml(XmlCls.strSettingsInfoXML, "SetCheck_kgsjZY")))
                    {
                        splashScreenManager1.SetWaitFormDescription("检查 " + strFyLyName + " 开工时间值域");
                        CheckKGSJFunc(pFeatureLayer, null);
                    }
                    listBoxCheckItems.Items.Clear();
                    this.Refresh();
                    string[] arrCheckPathes = Directory.GetFiles(strTxtPathes);
                    for (int j = 0; j < arrCheckPathes.Length; j++)
                    {
                        string strtxt = arrCheckPathes[j];
                        string strname = System.IO.Path.GetFileNameWithoutExtension(strtxt);
                        listBoxCheckItems.Items.Add(strname);
                    }

                    using (StreamReader sr = new StreamReader(strSetTxtPath, Encoding.UTF8))
                    {
                        while (!sr.EndOfStream)
                        {
                            string str = sr.ReadLine();
                            if (listBoxCheckItems.Items.Contains(str) == true)
                            {
                                int intIndex = listBoxCheckItems.Items.IndexOf(str);
                                //listBoxCheckItems.SetSelected(intIndex, true);
                                //listBoxCheckItems.
                                listBoxCheckItems.SetItemCheckState(intIndex, CheckState.Checked);
                            }
                        }
                    }

                    listBoxCheckItems.Refresh();
                    this.Refresh();

                    for (int j = 0; j < arrCheckPathes.Length; j++)
                    {
                        string strtxt = arrCheckPathes[j];
                        string strName = System.IO.Path.GetFileNameWithoutExtension(strtxt);
                        if (listBoxCheckItems.CheckedItems.Contains(strName) == false)
                        {
                            continue;
                        }
                        listBoxCheckItems.SelectedItem = strName;

                        splashScreenManager1.SetWaitFormDescription("正在检查... " + strFyLyName + " " + System.IO.Path.GetFileNameWithoutExtension(strtxt) + " " + (j + 1) + "/" + arrCheckPathes.Length);
                        using (StreamReader sr = new StreamReader(strtxt, Encoding.Default))
                        {
                            selSQL = sr.ReadToEnd();
                        }
                        try
                        {
                            string selSQLBJ = selSQL.Split('&')[0];//错误类型
                            selSQL = selSQL.Split('&')[1];//错误代码
                            CkeckDataOverCalcuFunc(pFeatureLayer, selSQL, selSQLBJ);

                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("出错" + ex.ToString());
                            MessageBox.Show("出错 " + ex.ToString());
                        }
                    }

                    listBoxCheckItems.Items.Clear();
                    this.Refresh();
                }
                DateTime dtEnd = DateTime.Now;
                TimeSpan dtDiff = dateDiff(dtStart, dtEnd);

                tlSProgressBar.Value = 0;
                splashScreenManager1.CloseWaitForm();
                
                using (SpeechSynthesizer speech = new SpeechSynthesizer())
                {
                    speech.Rate = 0;  //语速
                    speech.Volume = 100;  //音量
                    speech.Speak("检查完成");
                }

                MessageBox.Show("检查完成!耗时(" + dtDiff + ") " + " 检查结果存放在矢量数据的CheckResult字段里", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            /// <summary>
            /// 检查面积值域满足的条件
            /// </summary>
            /// <param name="culFeatLayer"></param>
            /// <param name="strSQL"></param>
            /// <param name="strDescription"></param>
            private void CheckMJValue(IFeatureLayer culFeatLayer, string strSQL, string strDescription)
            {
                ITable table = culFeatLayer.FeatureClass as ITable;
                IQueryFilter pQueryFilter = (IQueryFilter)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("FDFEBD95-ED75-11D0-9A95-080009EC734B")));
                //IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = strSQL;
                ICursor cursor = table.Update(pQueryFilter, false);
                ESRI.ArcGIS.Geodatabase.IRow Row = cursor.NextRow();
                if (Row == null)
                    return;
                //int field = Row.Fields.FindField(caculFieldName);
               // int field2 = Row.Fields.FindField(strFieldName);
                int fieldCheckResult = Row.Fields.FindField("CheckResult");
                int maxCount = table.RowCount(pQueryFilter);
                tlSProgressBar.Minimum = 0;
                tlSProgressBar.Maximum = maxCount;
                for (int i = 0; i < maxCount; i++)
                {
                    tlSProgressBar.Value = i;
                    string strCheckResult = (string)Row.Value[fieldCheckResult];
                    Row.Value[fieldCheckResult] = strCheckResult + strDescription + ";";
                    cursor.UpdateRow(Row);
                    Row = cursor.NextRow();
                }
            }

            /// <summary>
            /// 非汉字--非法字符检查
            /// </summary>
            /// <param name="culFeatLayer"></param>
            /// <param name="strSQL"></param>
            /// <param name="strFieldName"></param>
            /// <param name="strDescription"></param>
            private void CkeckDataFunc(IFeatureLayer culFeatLayer, string strSQL,string strFieldName,string strDescription)
            {
                ITable table = culFeatLayer.FeatureClass as ITable;
                IQueryFilter pQueryFilter = (IQueryFilter)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("FDFEBD95-ED75-11D0-9A95-080009EC734B")));
                //IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = strSQL;
                // pQueryFilter.SubFields = caculFieldName;
                ICursor cursor = table.Update(pQueryFilter, false);
                ESRI.ArcGIS.Geodatabase.IRow Row = cursor.NextRow();
                if (Row == null)
                    return;
                //int field = Row.Fields.FindField(caculFieldName);
                int field2 = Row.Fields.FindField(strFieldName);
                int fieldCheckResult = Row.Fields.FindField("CheckResult");
                int maxCount = table.RowCount(pQueryFilter);
                tlSProgressBar.Minimum = 0;
                tlSProgressBar.Maximum = maxCount;
                for (int i = 0; i < maxCount; i++)
                {
                    // Row.set_Value(field, Row.get_Value(field2));
                    //object a1 = Row.Value[field];
                    //object a2 = Row.Value[field2];
                    tlSProgressBar.Value = i;
                    try
                    {
                        dynamic calValue = Row.Value[field2];
                        bool isChineseCode= CheckIsChineseCode.isLegalChinaCode(calValue);
                        if (isChineseCode==false)
                        {
                            string strCheckResult= (string) Row.Value[fieldCheckResult];
                            Row.Value[fieldCheckResult] = strCheckResult + strDescription + ";";
                            cursor.UpdateRow(Row);
                        }
                        //cursor.UpdateRow(Row);
                    }
                    catch { }
                    Row = cursor.NextRow();
                }
                Marshal.ReleaseComObject(pQueryFilter);
            }

            /// <summary>
            /// zu--非法字符检查
            /// </summary>
            /// <param name="culFeatLayer"></param>
            /// <param name="strSQL"></param>
            /// <param name="strFieldName"></param>
            /// <param name="strDescription"></param>
            private void CkeckIllegalCharFunc(IFeatureLayer culFeatLayer, string strSQL, string strFieldName, string strDescription)
            {
                ITable table = culFeatLayer.FeatureClass as ITable;
                IQueryFilter pQueryFilter = (IQueryFilter)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("FDFEBD95-ED75-11D0-9A95-080009EC734B")));
                //IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = strSQL;
                // pQueryFilter.SubFields = caculFieldName;
                ICursor cursor = table.Update(pQueryFilter, false);
                ESRI.ArcGIS.Geodatabase.IRow Row = cursor.NextRow();
                if (Row == null)
                    return;
                //int field = Row.Fields.FindField(caculFieldName);
                int field2 = Row.Fields.FindField(strFieldName);
                int fieldCheckResult = Row.Fields.FindField("CheckResult");
                int maxCount = table.RowCount(pQueryFilter);
                tlSProgressBar.Minimum = 0;
                tlSProgressBar.Maximum = maxCount;
                for (int i = 0; i < maxCount; i++)
                {
                    // Row.set_Value(field, Row.get_Value(field2));
                    //object a1 = Row.Value[field];
                    //object a2 = Row.Value[field2];
                    tlSProgressBar.Value = i;
                    try
                    {
                        dynamic calValue = Row.Value[field2];
                        //bool isIllegalChar = IllegalCharCheckCls.IsIllegalChar2(calValue);
                        bool isIllegalChar = IllegalCharCheckCls.ChkBadChar(calValue);
                        
                        if (isIllegalChar == true)
                        {
                            string strCheckResult = (string)Row.Value[fieldCheckResult];
                            Row.Value[fieldCheckResult] = strCheckResult + strDescription + ";";
                            cursor.UpdateRow(Row);
                        }
                        //cursor.UpdateRow(Row);
                    }
                    catch { }
                    Row = cursor.NextRow();
                }
                Marshal.ReleaseComObject(pQueryFilter);
            }

            private void initValue(IFeatureLayer temp)
            {
                try
                {
                    AddStringField(temp.FeatureClass, "CheckResult");
                }
                catch
                {
                    Console.WriteLine("添加字段失败");
                }
                CaculValue(temp, null, "CheckResult", ";");
            }
            /// <summary>
            /// 添加字符串字段
            /// </summary>
            /// <param name="culFeatCls"></param>
            /// <param name="strFieldName"></param>
            private void AddStringField(IFeatureClass culFeatCls, string strFieldName)
            {
                IClass pClass = culFeatCls as IClass;
                IFieldsEdit fldsE = culFeatCls.Fields as IFieldsEdit;
                IField fld = new Field();
                IFieldEdit2 fldE = fld as IFieldEdit2;
                fldE.Type_2 = esriFieldType.esriFieldTypeString;
                fldE.Length_2 = 500;
                fldE.Name_2 = strFieldName;
                pClass.AddField(fld);
            }
           
            /// <summary>
            /// 根据名称得到要素类
            /// </summary>
            /// <param name="listFLayerZHH_Check"></param>
            /// <param name="strFtLayerName"></param>
            /// <returns></returns>
            private IFeatureLayer GetFeatureLayerByName(List<IFeatureLayer> listFLayerZHH_Check,string strFtLayerName)
            {
                if (listFLayerZHH_Check.Count<=0|| listFLayerZHH_Check == null)
                {
                    MessageBox.Show("请先打开数据");
                    return null;
                }
                IFeatureLayer temp = null;
                for (int i = 0; i < listFLayerZHH_Check.Count; i++)
                {
                    if (listFLayerZHH_Check[i].FeatureClass.AliasName== strFtLayerName)
                    {
                        temp = listFLayerZHH_Check[i];
                        break;
                    }
                }
                return temp;
            }
            //
            //转换后检查
            //
            private void btn_iscked_OpenData_Click(object sender, EventArgs e)
            {

                listBox_iscked_FtLy.Items.Clear();

                MyFolderBrowserDialog mfbd = new MyFolderBrowserDialog();
                if (mfbd.ShowDialog(this) == DialogResult.OK)
                {
                    listFLayerZHH_Check = new List<IFeatureLayer>();
                    string strGDB_Path = mfbd.DirectoryPath;
                    FileGDBWorkspaceFactory fac = new FileGDBWorkspaceFactory();
                    IFeatureWorkspace pFtWS = (IFeatureWorkspace)fac.OpenFromFile(strGDB_Path, 0);
                    IWorkspace pWork = (IWorkspace)pFtWS;
                    IEnumDataset pEnumDs = pWork.get_Datasets(esriDatasetType.esriDTFeatureClass);
                    IDataset pDs = pEnumDs.Next();
                   
                    tslbStatus.Text = "正在加载要素...";
                    statusStrip1.Refresh();

                    
                    while (pDs != null)
                    {
                        IFeatureClass temp = pDs as IFeatureClass;
                        IFeatureLayer tempLayer = new FeatureLayer();
                        tempLayer.FeatureClass = temp;
                        tempLayer.Name = tempLayer.FeatureClass.AliasName;
                        listBox_iscked_FtLy.Items.Add(tempLayer.Name);
                        listFLayerZHH_Check.Add(tempLayer);
                        pDs = pEnumDs.Next();
                    }
                    tslbStatus.Text = "加载完成!";
                    tlSpStLb.Text = "  选项:转换后属性质量检查  当前数据库:" + strGDB_Path;
                    statusStrip1.Refresh();
                }
            }
            private void btn_iscked_Excute_Click(object sender, EventArgs e)
            {
                if (listFLayerZHH_Check == null)
                {
                    MessageBox.Show("没有数据可查!请先打开数据", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                splashScreenManager1.ShowWaitForm();
                splashScreenManager1.SetWaitFormDescription("请耐心等待...");

                for (int i = 0; i < ModelDataCls.FeatureLayerNameModel.Count; i++)
                {
                    string selSQL = String.Empty;
                    string strName = ModelDataCls.FeatureLayerNameModel[i];

                    listBox_iscked_FtLy.SelectedValue = strName;
                    listBox_iscked_FtLy.Refresh();

                    splashScreenManager1.SetWaitFormCaption("准备检查" + strName);
                    IFeatureLayer FtLayerZZL = GetFeatureLayerByName(listFLayerZHH_Check,strName);
                    if (FtLayerZZL==null)
                    {
                        continue;
                    }
                    initValue(FtLayerZZL);
                    string strCheckTXTPath = String.Empty;
                    splashScreenManager1.SetWaitFormCaption("检查 " + strName);
                    if (FtLayerZZL.FeatureClass.AliasName=="住宅类")
                    {
                        strCheckTXTPath = Directory.GetCurrentDirectory() + "\检查项\转换后检查\住宅类";
                    }
                    if (FtLayerZZL.FeatureClass.AliasName == "产业类")
                    {
                        strCheckTXTPath = Directory.GetCurrentDirectory() + "\检查项\转换后检查\产业类";

                    }
                    if (FtLayerZZL.FeatureClass.AliasName == "公共服务类")
                    {
                        strCheckTXTPath = Directory.GetCurrentDirectory() + "\检查项\转换后检查\公共服务类";
                    }

                    string[] arrCheckPathes = Directory.GetFiles(strCheckTXTPath);
                    for (int j = 0; j < arrCheckPathes.Length; j++)
                    {
                        string strtxt = arrCheckPathes[j];
                        splashScreenManager1.SetWaitFormDescription("正在检查... " + System.IO.Path.GetFileNameWithoutExtension(strtxt)+" "+(j+1)+"/"+ arrCheckPathes.Length);
                        using (StreamReader sr = new StreamReader(strtxt, Encoding.Default))
                        {
                            selSQL = sr.ReadToEnd();
                        }
                        try
                        {
                            string selSQLBJ = selSQL.Split('&')[0];//错误类型
                            selSQL = selSQL.Split('&')[1];//错误代码
                            CkeckDataOverCalcuFunc(FtLayerZZL, selSQL, selSQLBJ);

                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("出错"+ selSQL);
                            MessageBox.Show("出错 " + ex.ToString());
                        }
                    }
                }
                tlSProgressBar.Value = 0;
                splashScreenManager1.CloseWaitForm();
                MessageBox.Show("检查完成! 检查结果存放在矢量数据的CheckResult字段里", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            private void btn_ViewCheckes_Click(object sender, EventArgs e)
            {
               string strCheckTXTPath = Directory.GetCurrentDirectory() + "\检查项\转换后检查";
                Process.Start(strCheckTXTPath);
            }

            /// <summary>
            /// 开工时间值域检查
            /// </summary>
            /// <param name="culFeatLayer"></param>
            /// <param name="strSQL"></param>
            private void CheckKGSJFunc(IFeatureLayer culFeatLayer, string strSQL)
            {
                ITable table = culFeatLayer.FeatureClass as ITable;
                IQueryFilter pQueryFilter = (IQueryFilter)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("FDFEBD95-ED75-11D0-9A95-080009EC734B")));
                //IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = strSQL;
                // pQueryFilter.SubFields = caculFieldName;
                ICursor cursor = table.Update(pQueryFilter, false);
                ESRI.ArcGIS.Geodatabase.IRow Row = cursor.NextRow();
                if (Row == null)
                    return;
                //int field = Row.Fields.FindField(caculFieldName);
                //  int field2 = Row.Fields.FindField(strFieldName);
                int fieldCheckResult = Row.Fields.FindField("CheckResult");
                int fieldkgsj = Row.Fields.FindField("kgsj");
                int maxCount = table.RowCount(pQueryFilter);
                tlSProgressBar.Minimum = 0;
                tlSProgressBar.Maximum = maxCount;
                for (int i = 0; i < maxCount; i++)
                {
                    // Row.set_Value(field, Row.get_Value(field2));
                    //object a1 = Row.Value[field];
                    //object a2 = Row.Value[field2];
                    tlSProgressBar.Value = i;
                    try
                    {
                        int intkgsj = Convert.ToInt32(Row.Value[fieldkgsj]);
                        if (intkgsj < 2000 || intkgsj > 2020)
                        {
                            string strCheckResult = (string)Row.Value[fieldCheckResult];
                            Row.Value[fieldCheckResult] = strCheckResult + "kgsj不在值域;";
                            cursor.UpdateRow(Row);
                        }
                    }
                    catch
                    {}
                    Row = cursor.NextRow();
                }
                Marshal.ReleaseComObject(pQueryFilter);
            }
            /// <summary>
            /// 检查房屋层数异常
            /// </summary>
            /// <param name="culFeatLayer"></param>
            /// <param name="strSQL"></param>
            /// <param name="strDescription"></param>
            private void CheckCSFunc(IFeatureLayer culFeatLayer, string strSQL)
            {
                ITable table = culFeatLayer.FeatureClass as ITable;
                IQueryFilter pQueryFilter = (IQueryFilter)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("FDFEBD95-ED75-11D0-9A95-080009EC734B")));
                //IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = strSQL;
                // pQueryFilter.SubFields = caculFieldName;
                ICursor cursor = table.Update(pQueryFilter, false);
                ESRI.ArcGIS.Geodatabase.IRow Row = cursor.NextRow();
                if (Row == null)
                    return;
                //int field = Row.Fields.FindField(caculFieldName);
                //  int field2 = Row.Fields.FindField(strFieldName);
                int fieldCheckResult = Row.Fields.FindField("CheckResult");
                int fieldCS = Row.Fields.FindField("cs");
                int maxCount = table.RowCount(pQueryFilter);
                tlSProgressBar.Minimum = 0;
                tlSProgressBar.Maximum = maxCount;
                for (int i = 0; i < maxCount; i++)
                {
                    // Row.set_Value(field, Row.get_Value(field2));
                    //object a1 = Row.Value[field];
                    //object a2 = Row.Value[field2];
                    tlSProgressBar.Value = i;
                    try
                    {
                        string strCs = Row.Value[fieldCS].ToString();
                        double doubleCS = Convert.ToDouble(strCs);
                        int intCS = Convert.ToInt32(doubleCS);
                        double jg = doubleCS - intCS;
                        if (doubleCS<1.0|| doubleCS>=15.0)
                        {
                            string strCheckResult = (string)Row.Value[fieldCheckResult];
                            Row.Value[fieldCheckResult] = strCheckResult + "cs值疑似异常;";
                            cursor.UpdateRow(Row);
                        }
                       if (jg!=0.0)
                        {
                            string strCheckResult = (string)Row.Value[fieldCheckResult];
                            Row.Value[fieldCheckResult] = strCheckResult + "cs须为整数;";
                            cursor.UpdateRow(Row);
                        }
                      
                    }
                    catch(Exception ex)
                    {
                        string strCheckResult = (string)Row.Value[fieldCheckResult];
                        Row.Value[fieldCheckResult] = strCheckResult + "cs值疑似异常;";
                        cursor.UpdateRow(Row);
                        Console.WriteLine(ex.ToString());
                    }
                    Row = cursor.NextRow();
                }
                Marshal.ReleaseComObject(pQueryFilter);
            }
            private void CkeckDataOverCalcuFunc(IFeatureLayer culFeatLayer, string strSQL, string strDescription)
            {
                ITable table = culFeatLayer.FeatureClass as ITable;
                IQueryFilter pQueryFilter = (IQueryFilter)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("FDFEBD95-ED75-11D0-9A95-080009EC734B")));
                //IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = strSQL;
                // pQueryFilter.SubFields = caculFieldName;
                ICursor cursor = table.Update(pQueryFilter, false);
                ESRI.ArcGIS.Geodatabase.IRow Row = cursor.NextRow();
                if (Row == null)
                    return;
                //int field = Row.Fields.FindField(caculFieldName);
              //  int field2 = Row.Fields.FindField(strFieldName);
                int fieldCheckResult = Row.Fields.FindField("CheckResult");
                int maxCount = table.RowCount(pQueryFilter);
                tlSProgressBar.Minimum = 0;
                tlSProgressBar.Maximum = maxCount;
                for (int i = 0; i < maxCount; i++)
                {
                    // Row.set_Value(field, Row.get_Value(field2));
                    //object a1 = Row.Value[field];
                    //object a2 = Row.Value[field2];
                    tlSProgressBar.Value = i;
                    try
                    {
                        //dynamic calValue = Row.Value[field2];
                        //bool isChineseCode = CheckIsChineseCode.isLegalChinaCode(calValue);
                        //if (isChineseCode == false)
                        //{
                           string strCheckResult = (string)Row.Value[fieldCheckResult];
                            Row.Value[fieldCheckResult] = strCheckResult + strDescription + ";";
                            cursor.UpdateRow(Row);
                        //}
                       // cursor.UpdateRow(Row);
                    }
                    catch { }
                    Row = cursor.NextRow();
                }
                Marshal.ReleaseComObject(pQueryFilter);
            }

            private void btn_AddBH_Click(object sender, EventArgs e)
            {
                if (culFeatLayer == null)
                {
                    MessageBox.Show("请先打开或选择数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                splashScreenManager1.ShowWaitForm();
                splashScreenManager1.SetWaitFormCaption("正在执行  透视统计");
                splashScreenManager1.SetWaitFormDescription("请耐心等待...");
                string strDBFPath= CommCls.GetStatistics(culFeatLayer);
                 DataTable dt= CommCls.dbfToDataTable(strDBFPath);
                splashScreenManager1.CloseWaitForm();

                FormAddBH formAddBH = new FormAddBH();
                formAddBH.Text = culFeatLayer.FeatureClass.AliasName+"-添加编号";
                formAddBH.dt = dt;
                formAddBH.pFeatureLayer = culFeatLayer;
                formAddBH.ShowDialog();
            }

            //private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
            //{

            //    //tlSpStLb
            //    tlSpStLb.Text = "  选项:" + tabControl1.SelectedTab.Text;
            //}

            private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
            {
                if (this.WindowState==FormWindowState.Normal)
                {
                    int intLocationX = this.Location.X;
                    int intLocationY = this.Location.Y;
                    XmlCls.UpdateXml(StrSaveXMLPath, "LocationX", intLocationX.ToString());
                    XmlCls.UpdateXml(StrSaveXMLPath, "LocationY", intLocationY.ToString());

                    int winWidth = this.Width;
                    int winHeight = this.Height;
                    XmlCls.UpdateXml(StrSaveXMLPath, "winWidth", winWidth.ToString());
                    XmlCls.UpdateXml(StrSaveXMLPath, "winHeight", winHeight.ToString());
                }
                Application.Exit();
            }

            /// <summary>
            /// 重新计算代码
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btn_CalculateXZDM_Click(object sender, EventArgs e)
            {
                if (culFeatLayer == null)
                {
                    MessageBox.Show("请先打开或选择数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                splashScreenManager1.ShowWaitForm();
                splashScreenManager1.SetWaitFormCaption("正在计算  根据名称计算代码");
                splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "city");
                CaculValueGetCodeByNameShi(culFeatLayer, null, "city_name", "city");

                splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "xzqdm_xq");
                CaculValueGetCodeByNameQuXian(culFeatLayer, null, "xzqmc_xq", "xzqdm_xq");

                //计算乡镇代码
                splashScreenManager1.SetWaitFormDescription("请耐心等待...计算 " + "xzqdm_xz");
                CaculValueGetCodeByNameXiang(culFeatLayer, null, "xzqmc_xz", "xzqdm_xz");
                splashScreenManager1.CloseWaitForm();
                MessageBox.Show("计算完成", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            /// <summary>
            /// 读取照片表数据
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void txtEdit_PhotoTable_DragDrop(object sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
                {
                    string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
                    if (files.Length > 1)
                    {
                        MessageBox.Show("只允许拖拽一个文件", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    // Directory.
                    string strExtension = System.IO.Path.GetExtension(files[0]);
                    if (strExtension == "")
                    {
                        MessageBox.Show("不能选择文件夹", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    if (strExtension != ".xlsx")
                    {
                        MessageBox.Show("请选择*.xlsx文件", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    txtEdit_PhotoTable.Text = files[0];
                }
            }

            private void txtEdit_PhotoTable_DragEnter(object sender, DragEventArgs e)
            {
                e.Effect = DragDropEffects.All;
            }

            private void txtEdit_PhotoTable_DragOver(object sender, DragEventArgs e)
            {
                e.Effect = DragDropEffects.All;
            }

            private void txtEdit_YSPhotoPath_DragDrop(object sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
                {
                    string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
                    if (files.Length > 1)
                    {
                        MessageBox.Show("只允许拖拽一个文件", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    // Directory.
                    string strExtension = System.IO.Path.GetExtension(files[0]);
                    if (strExtension != "")
                    {
                        MessageBox.Show("不能选择文件", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    txtEdit_YSPhotoPath.Text = files[0];

                    //foreach (string file in files)
                    //{
                    //    //listBox1_AllPicturePath.Items.Add(file);
                    //    textBox1.Text = file;
                    //}
                }
            }

            private void txtEdit_YSPhotoPath_DragEnter(object sender, DragEventArgs e)
            {
                e.Effect = DragDropEffects.All;
            }

            private void txtEdit_YSPhotoPath_DragOver(object sender, DragEventArgs e)
            {
                e.Effect = DragDropEffects.All;
            }

            private void txtEdit_NewPhotoPath_DragDrop(object sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
                {
                    string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
                    if (files.Length > 1)
                    {
                        MessageBox.Show("只允许拖拽一个文件", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    // Directory.
                    string strExtension = System.IO.Path.GetExtension(files[0]);
                    if (strExtension != "")
                    {
                        MessageBox.Show("不能选择文件", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    txtEdit_NewPhotoPath.Text = files[0];

                    //foreach (string file in files)
                    //{
                    //    //listBox1_AllPicturePath.Items.Add(file);
                    //    textBox1.Text = file;
                    //}
                }
            }

            private void txtEdit_NewPhotoPath_DragEnter(object sender, DragEventArgs e)
            {
                e.Effect = DragDropEffects.All;
            }

            private void txtEdit_NewPhotoPath_DragOver(object sender, DragEventArgs e)
            {
                e.Effect = DragDropEffects.All;
            }

            /// <summary>
            /// 用户存储原始照片表数据
            /// </summary>
            private List<ZPB_Cls> listZPB = null;

            /// <summary>
            /// 获取照片表数据
            /// </summary>
            /// <param name="strExcelPath"></param>
            private void getZPB_FromPath(string strExcelPath)
            {
               listZPB = new List<ZPB_Cls>();
                using (System.IO.FileStream fs = new System.IO.FileStream(strExcelPath, FileMode.Open, FileAccess.Read))
                {
                    //XSSFWorkbook 适用XLSX格式,HSSFWorkbook 适用XLS格式
                    string fileExt = System.IO.Path.GetExtension(strExcelPath).ToLower();
                    IWorkbook workbook;
                    if (fileExt == ".xlsx") { workbook = new XSSFWorkbook(fs); } else if (fileExt == ".xls") { workbook = new HSSFWorkbook(fs); } else { workbook = null; }
                    ISheet sheet = workbook.GetSheetAt(0);
                    for (int i = 1; i <= sheet.LastRowNum; i++)
                    {
                        NPOI.SS.UserModel.IRow tempRow = sheet.GetRow(i);

                        ZPB_Cls tempZPB_Cls = new ZPB_Cls();
                        tempZPB_Cls.id = tempRow.GetCell(0).ToString();
                        tempZPB_Cls.name = tempRow.GetCell(1).ToString();
                        tempZPB_Cls.fwbh = tempRow.GetCell(2).ToString();
                        tempZPB_Cls.folder = tempRow.GetCell(3).ToString();
                        listZPB.Add(tempZPB_Cls);
                    }
                }
               // return listZPB;
            }
            /// <summary>
            /// 读取照片表数据
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btn_PhotoTable_Click(object sender, EventArgs e)
            {
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Title = "打开照片表";
                ofd.Filter = "Excel文件(*.xlsx)|*.xlsx";
                ofd.Multiselect = false;
                if (ofd.ShowDialog()==DialogResult.OK)
                {
                       txtEdit_PhotoTable.Text = ofd.FileName;
                       //getZPB_FromPath(ofd.FileName);
                }
            }

            /// <summary>
            /// 原始照片路径
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btn_YSPhotoPath_Click(object sender, EventArgs e)
            {
                MyFolderBrowserDialog mfbd = new MyFolderBrowserDialog();
                if (mfbd.ShowDialog(this) == DialogResult.OK)
                {
                    txtEdit_YSPhotoPath.Text = mfbd.DirectoryPath;
                }
            }

            /// <summary>
            /// 结果照片路径
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btn_NewPhotoPath_Click(object sender, EventArgs e)
            {
                MyFolderBrowserDialog mfbd = new MyFolderBrowserDialog();
                if (mfbd.ShowDialog(this) == DialogResult.OK)
                {
                    txtEdit_NewPhotoPath.Text = mfbd.DirectoryPath;
                }
            }

            /// <summary>
            /// 获取shp文件
            /// </summary>
            /// <param name="shpfilePath">shp文件路径</param>
            /// <returns></returns>
            private IFeatureClass GetShapefile(string shpfilePath)
            {
                IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();
                IWorkspaceFactoryLockControl pWorkspaceFactoryLockControl = pWorkspaceFactory as IWorkspaceFactoryLockControl;
                if (pWorkspaceFactoryLockControl.SchemaLockingEnabled)
                {
                    pWorkspaceFactoryLockControl.DisableSchemaLocking();
                }
                string directoryPath = System.IO.Path.GetDirectoryName(shpfilePath);
                IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(directoryPath, 0);
                IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;
                IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(System.IO.Path.GetFileName(shpfilePath));
                return pFeatureClass;
            }


            /// <summary>
            /// 存储照片处理之照片要素类
            /// </summary>
            private List<IFeatureLayer> listZPFL = null;

            /// <summary>
            /// 照片处理之读取GDB数据
            /// </summary>
            /// <param name="strGDB_Path"></param>
            /// <returns></returns>
            private List<IFeatureLayer> getZHQ_FLFunc(string strGDB_Path)
            {
                comboBox1.Items.Clear();
                List<IFeatureLayer> listFL = new List<IFeatureLayer>();
                FileGDBWorkspaceFactory fac = new FileGDBWorkspaceFactory();
                IFeatureWorkspace pFtWS = (IFeatureWorkspace)fac.OpenFromFile(strGDB_Path, 0);
                IWorkspace pWork = (IWorkspace)pFtWS;
                IEnumDataset pEnumDs = pWork.get_Datasets(esriDatasetType.esriDTFeatureClass);
                IDataset pDs = pEnumDs.Next();
                while (pDs != null)
                {
                    IFeatureClass temp = pDs as IFeatureClass;
                    IFeatureLayer tempLayer = new FeatureLayer();
                    tempLayer.FeatureClass = temp;
                    tempLayer.Name = tempLayer.FeatureClass.AliasName;
                    comboBox1.Items.Add(tempLayer.Name);
                    listFL.Add(tempLayer);
                    pDs = pEnumDs.Next();
                }
                return listFL;
            }
            private void textEdit1_DragDrop(object sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
                {
                    string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
                    if (files.Length > 1)
                    {
                        MessageBox.Show("只允许拖拽一个文件", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    // Directory.
                    string strExtension = System.IO.Path.GetExtension(files[0]);
                    if (strExtension != ".gdb")
                    {
                        MessageBox.Show("不能选择文件", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    textEdit1.Text = files[0];
                    
                    //foreach (string file in files)
                    //{
                    //    //listBox1_AllPicturePath.Items.Add(file);
                    //    textBox1.Text = file;
                    //}
                }
            }

            private void textEdit1_DragEnter(object sender, DragEventArgs e)
            {
                e.Effect = DragDropEffects.All;
            }

            private void textEdit1_DragOver(object sender, DragEventArgs e)
            {
                e.Effect = DragDropEffects.All;
            }

            private void btn_ZPGDB_Click(object sender, EventArgs e)
            {
                MyFolderBrowserDialog mfbd = new MyFolderBrowserDialog();
                if (mfbd.ShowDialog(this) == DialogResult.OK)
                {
                    textEdit1.Text = mfbd.DirectoryPath;
                    //listZPFL = getZHQ_FLFunc(textEdit1.Text);
                }
            }
            /// <summary>
            /// 照片之要素类
            /// </summary>
            private IFeatureLayer pZP_FL = null;
            /// <summary>
            /// 多媒体之选择要素类
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                pZP_FL = listZPFL[comboBox1.SelectedIndex];
            }

            private void btn_ExcutePhoto_Click(object sender, EventArgs e)
            {
                if (pZP_FL==null)
                {
                    return;
                }
                if (listZPB==null|| listZPB.Count<=0)
                {
                    return;
                }
                
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Title = "处理结果";
                sfd.Filter= "Excel文件|*.xlsx";
                sfd.FileName = pZP_FL.FeatureClass.AliasName + "_处理结果";
                sfd.AddExtension = true;
                if (sfd.ShowDialog()==DialogResult.OK)
                {

                    splashScreenManager1.ShowWaitForm();
                    splashScreenManager1.SetWaitFormCaption("执行 照片处理");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...照片拷贝并重命名");
                   // listZPB_ZLJG = new List<ZPB_Cls>();
                    for (int i = 0; i < listZPB.Count; i++)
                    {
                        ZPB_Cls temp = listZPB[i];
                        string strZP_Path = txtEdit_YSPhotoPath.Text + "\" + temp.folder + "\" + temp.name;//原始照片路径
                        if(File.Exists(strZP_Path))
                        {
                            try
                            {
                                //string strZP_Path = txtEdit_YSPhotoPath.Text + "\" + temp.folder + "\" + temp.name;//原始照片路径
                                string NewFileName = Guid.NewGuid().ToString() + ".jpg";//新照片名称
                                
                                temp.strNewName = NewFileName;
                                string strSQL = "fwbh='" + temp.fwbh + "'";
                                IFeature pFeature = getPointToZB(pZP_FL, strSQL);
                                ESRI.ArcGIS.Geometry.IPoint myPoint = pFeature.Shape as ESRI.ArcGIS.Geometry.IPoint;
                                int pBHField = pFeature.Fields.FindField("BH");
                                string pBHValue= pFeature.Value[pBHField].ToString();
                                string strNewZP_Folder = txtEdit_NewPhotoPath.Text + "\" + pBHValue;
                                try
                                {
                                    Directory.CreateDirectory(strNewZP_Folder);
                                }
                                catch { }
                                string strNewZP_Path = txtEdit_NewPhotoPath.Text + "\" + pBHValue + "\" + NewFileName;//新照片路径
                                if (myPoint!=null)
                                {
                                    temp.XZB = myPoint.X;
                                    temp.YZB = myPoint.Y;
                                    //listZPB_ZLJG.Add(temp);
                                    //FileInfo fi = new FileInfo(strZP_Path);
                                    //fi.CopyTo(strNewZP_Path,true);
                                    File.Copy(strZP_Path, strNewZP_Path, true);
                                } 
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.ToString());
                            }
                        }    
                    }

                    //IWorkbook workbook = new XSSFWorkbook();
                    //ISheet sheet = workbook.CreateSheet("Sheet1");
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...导出处理结果表");
                    string fileExt = System.IO.Path.GetExtension(sfd.FileName).ToLower();
                    IWorkbook workbook;
                    if (fileExt == ".xlsx") { workbook = new XSSFWorkbook(); } else if (fileExt == ".xls") { workbook = new HSSFWorkbook(); } else { workbook = null; }
                    var sheet = workbook.CreateSheet("Sheet1");
                    NPOI.SS.UserModel.IRow row = sheet.CreateRow(0);
                    row.CreateCell(0).SetCellValue("id");
                    row.CreateCell(1).SetCellValue("name");
                    row.CreateCell(2).SetCellValue("fwbh");
                    row.CreateCell(3).SetCellValue("NewName");
                    row.CreateCell(4).SetCellValue("XZB");
                    row.CreateCell(5).SetCellValue("YZB");
                    for (int i = 0; i < listZPB.Count; i++)
                    {
                        if (listZPB[i].XZB!=0.0)
                        {
                            NPOI.SS.UserModel.IRow rowData = sheet.CreateRow(i + 1);
                            rowData.CreateCell(0).SetCellValue(listZPB[i].id);
                            rowData.CreateCell(1).SetCellValue(listZPB[i].name);
                            rowData.CreateCell(2).SetCellValue(listZPB[i].fwbh);
                            rowData.CreateCell(3).SetCellValue(listZPB[i].strNewName);
                            rowData.CreateCell(4).SetCellValue(listZPB[i].XZB);
                            rowData.CreateCell(5).SetCellValue(listZPB[i].YZB);
                        }
                    }
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...写入磁盘");
                    using (FileStream fs2 = File.OpenWrite(sfd.FileName))
                    {
                        workbook.Write(fs2);
                        //MessageBox.Show("Excel已经写入成功!");
                    }

                    splashScreenManager1.CloseWaitForm();
                }
            }
            private IFeature getPointToZB(IFeatureLayer culFeatLayer, string strSQL)
            {
                //ESRI.ArcGIS.Geometry.IPoint pPoint = null;
               IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = strSQL;
                IFeatureCursor pFCursor = culFeatLayer.FeatureClass.Search(pQueryFilter, false);
                IFeature pFeature = pFCursor.NextFeature();
                
                //ESRI.ArcGIS.Geometry.IPoint pPoint = new ESRI.ArcGIS.Geometry.Point();
                //ESRI.ArcGIS.Geometry.IArea pArea = pFeature.Shape as ESRI.ArcGIS.Geometry.IArea;
                //pArea.QueryCentroid(pPoint);
                //pPoint = pFeature.Shape as ESRI.ArcGIS.Geometry.IPoint;
                return pFeature;
            }

            private void txtEdit_PhotoTable_EditValueChanged(object sender, EventArgs e)
            {
                getZPB_FromPath(txtEdit_PhotoTable.Text);
            }

            private void textEdit1_EditValueChanged(object sender, EventArgs e)
            {
                listZPFL = getZHQ_FLFunc(textEdit1.Text);
            }


            /// <summary>
            /// 转换前处理之乡镇名称最大匹配
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btn_unck_XZPP_Click(object sender, EventArgs e)
            {
                if (listFLayerZHQ_Check == null)
                {
                    MessageBox.Show("没有数据可查!请先打开数据", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                splashScreenManager1.ShowWaitForm();
                for (int i = 0; i < listFLayerZHQ_Check.Count; i++)
                {
                    IFeatureLayer culFeatLayer = listFLayerZHQ_Check[i];
                    string strFyLyName = culFeatLayer.FeatureClass.AliasName;

                    listBox_unck_FtLy.SelectedValue = strFyLyName;
                    listBox_unck_FtLy.Refresh();

                    splashScreenManager1.SetWaitFormCaption("执行检查 " + culFeatLayer.FeatureClass.AliasName + " 乡镇名称最大匹配");

                    //添加字段
                    try
                    {
                        AddStringField(culFeatLayer.FeatureClass, "CheckMaxMatch");
                    }
                    catch
                    {
                        Console.WriteLine("添加字段失败");
                    }
                    splashScreenManager1.SetWaitFormDescription("请耐心等待...准备检查");
                    CaculValue(culFeatLayer, null, "CheckMaxMatch", "1");

                    splashScreenManager1.SetWaitFormDescription("请耐心等待...乡镇名称是否标准");
                    CkeckXZMC(culFeatLayer, null, "xiang", "xian", "CheckMaxMatch");

                    splashScreenManager1.SetWaitFormDescription("请耐心等待...乡镇名称最大匹配");
                    string strSQL = "CheckMaxMatch<>'1'";
                    CheckXZNameMaxMatch(culFeatLayer, strSQL, "xiang", "xian", "CheckMaxMatch");
                }
                tlSProgressBar.Value = 0;
                splashScreenManager1.CloseWaitForm();
                MessageBox.Show("匹配完成,结果存放在"CheckMaxMatch"字段中","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
            }
            private void CkeckXZMC(IFeatureLayer culFeatLayer, string strSQL, string strMhFieldXZ, string strMhFieldXQ, string strSaveField)
            {
                ITable table = culFeatLayer.FeatureClass as ITable;
                IQueryFilter pQueryFilter = (IQueryFilter)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("FDFEBD95-ED75-11D0-9A95-080009EC734B")));
                //IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = strSQL;
                // pQueryFilter.SubFields = caculFieldName;
                ICursor cursor = table.Update(pQueryFilter, false);
                ESRI.ArcGIS.Geodatabase.IRow Row = cursor.NextRow();
                if (Row == null)
                    return;
                int fieldXZ = Row.Fields.FindField(strMhFieldXZ);//乡镇名称字段
                int fieldXQ = Row.Fields.FindField(strMhFieldXQ);//县区名称字段
                int fieldSave = Row.Fields.FindField(strSaveField);//保存最大匹配名称字段
                int maxCount = table.RowCount(pQueryFilter);
                tlSProgressBar.Minimum = 0;
                tlSProgressBar.Maximum = maxCount;

                string Connstr = SQliteHelperCls.CustomerConnStr(SQliteHelperCls.strDBPath);
                //string strSQL = "Select 乡镇名称 from 乡镇代码名称 where 县区名称='息烽县'";

                for (int i = 0; i < maxCount; i++)
                {
                    tlSProgressBar.Value = i;
                    string strXZName = Row.Value[fieldXZ].ToString();
                    string strXQName = Row.Value[fieldXQ].ToString();
                    try
                    {
                        string strSQLiteSQL = "Select 乡镇名称 from 乡镇代码名称 where 县区名称='" + strXQName + "' and 乡镇名称 = '" + strXZName + "'";
                        using (SQLiteConnection SqlConn = new SQLiteConnection(Connstr))
                        {
                            using (SQLiteCommand SqlCmd = new SQLiteCommand(strSQLiteSQL, SqlConn))
                            {
                                SqlConn.Open();
                                using (SQLiteDataReader reader = SqlCmd.ExecuteReader(CommandBehavior.CloseConnection))
                                {
                                    if (reader.HasRows == false)
                                    {
                                        try
                                        {
                                            Row.Value[fieldSave] = "未找到乡镇名称";
                                            cursor.UpdateRow(Row);
                                        }
                                        catch { }
                                    }
                                }
                            }
                        }
                    }
                    catch { }
                    Console.WriteLine(i);
                    Row = cursor.NextRow();
                }

                //using (SQLiteConnection SqlConn = new SQLiteConnection(Connstr))
                //{
                //    SqlConn.Open();
                //    for (int i = 0; i < maxCount; i++)
                //    {
                //        tlSProgressBar.Value = i;
                //        string strXZName = Row.Value[fieldXZ].ToString();
                //        string strXQName = Row.Value[fieldXQ].ToString();

                //        try
                //        {
                //            string strSQLiteSQL = "Select 乡镇名称 from 乡镇代码名称 where 县区名称='" + strXQName + "' and 乡镇名称 = '" + strXZName + "'";
                //            using (SQLiteCommand SqlCmd = new SQLiteCommand(strSQLiteSQL, SqlConn))
                //            {
                //               // SqlConn.Open();
                //                using (SQLiteDataReader reader = SqlCmd.ExecuteReader(CommandBehavior.CloseConnection))
                //                {
                //                    if (reader.HasRows == false)
                //                    {
                //                        try
                //                        {
                //                            Row.Value[fieldSave] = "false";
                //                            cursor.UpdateRow(Row);
                //                        }
                //                        catch { }
                //                    }
                //                }
                //            }
                //        }
                //        catch{}

                //        Console.WriteLine(i);
                //        Row = cursor.NextRow();
                //    }
                //}

            }
            /// <summary>
            /// 查找名称最大匹配
            /// </summary>
            /// <param name="culFeatLayer"></param>
            /// <param name="strSQL"></param>
            /// <param name="strMhFieldXZ">乡镇名称字段</param>
            /// <param name="strMhFieldXQ">县区名称字段</param>
            /// <param name="strSaveField">保存最大匹配字段</param>
            private void CheckXZNameMaxMatch(IFeatureLayer culFeatLayer, string strSQL,string strMhFieldXZ,string strMhFieldXQ,string strSaveField)
            {
                ITable table = culFeatLayer.FeatureClass as ITable;
                IQueryFilter pQueryFilter = (IQueryFilter)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("FDFEBD95-ED75-11D0-9A95-080009EC734B")));
                //IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = strSQL;
                // pQueryFilter.SubFields = caculFieldName;
                ICursor cursor = table.Update(pQueryFilter, false);
                ESRI.ArcGIS.Geodatabase.IRow Row = cursor.NextRow();
                if (Row == null)
                    return;
                int fieldXZ = Row.Fields.FindField(strMhFieldXZ);//乡镇名称字段
                int fieldXQ = Row.Fields.FindField(strMhFieldXQ);//县区名称字段
                int fieldSave = Row.Fields.FindField(strSaveField);//保存最大匹配名称字段
                int maxCount = table.RowCount(pQueryFilter);
                tlSProgressBar.Minimum = 0;
                tlSProgressBar.Maximum = maxCount;


                string Connstr = SQliteHelperCls.CustomerConnStr(SQliteHelperCls.strDBPath);
                //string strSQL = "Select 乡镇名称 from 乡镇代码名称 where 县区名称='息烽县'";
                
                for (int i = 0; i < maxCount; i++)
                {
                    tlSProgressBar.Value = i;
                    string strXZName = Row.Value[fieldXZ].ToString();

                    //移除非法字符
                    strXZName = CheckIsChineseCode.GetNewChinaCode(strXZName);
                    strXZName = strXZName.Replace("办事处", "");
                    strXZName = strXZName.Replace("街道", "");
                    strXZName = strXZName.Replace("族", "");

                    //if (strXZName.Contains("街道")|| strXZName.Contains("族"))
                    //{
                    //    try { strXZName = strXZName.Substring(0, 2); }
                    //    catch { }
                    //}

                    string strXQName = Row.Value[fieldXQ].ToString();
                    string strZDPPName = "1";
                    string temp = String.Empty;//记录最终 最大匹配值
                    //string strSQLiteSQL = "Select 乡镇名称 from 乡镇代码名称 where 县区名称='"+ strXQName + "' and 乡镇名称 = '"+ strXZName + "'";
                    string strSQLiteSQL = "Select 乡镇名称 from 乡镇代码名称 where 县区名称='" + strXQName + "'";
                    using (SQLiteConnection SqlConn = new SQLiteConnection(Connstr))
                    {
                        using (SQLiteCommand SqlCmd = new SQLiteCommand(strSQLiteSQL, SqlConn))
                        {
                            SqlConn.Open();
                            SQLiteDataReader reader = SqlCmd.ExecuteReader(CommandBehavior.CloseConnection);
                            
                            if (reader.HasRows)
                            {
                                while (reader.Read())
                                {
                                    string str = reader.GetString(0);//标准乡镇名称
                                   
                                    string strJG = LCS(str, strXZName);//最大匹配值
                                    // string strJG = LCS(textBox1.Text, str);
                                    if (String.IsNullOrEmpty(strJG) == false && strJG.Length >= 2)
                                    {
                                        if(temp.Length< strJG.Length)
                                        {
                                            temp = strJG;
                                            strZDPPName = str;
                                        }
                                    }
                                   // Console.WriteLine(str);
                                }
                            }

                        }
                    }

                    try
                    {
                        if (strZDPPName != "1")
                        {
                            Row.Value[fieldSave] = strZDPPName;
                            cursor.UpdateRow(Row);
                        }
                        Console.WriteLine(i);
                    }
                    catch { }
                    Row = cursor.NextRow();
                }
            }

            #region LCS算法实现
            /// <summary>
            /// 最大公共字符串
            /// LCS算法
            /// Longest Common Subsequence
            /// </summary>
            /// <param name="str1">字符串A</param>
            /// <param name="str2">字符串B</param>
            /// <returns></returns>
            private string LCS(string str1, string str2)
            {
                if (str1 == str2)
                {
                    return str1;
                }
                else if (String.IsNullOrEmpty(str1) || String.IsNullOrEmpty(str2))
                {
                    return null;
                }
                var d = new int[str1.Length, str2.Length];
                var index = 0;
                var length = 0;
                for (int i = 0; i < str1.Length; i++)
                {
                    for (int j = 0; j < str2.Length; j++)
                    {
                        //左上角
                        var n = i - 1 >= 0 && j - 1 >= 0 ? d[i - 1, j - 1] : 0;
                        //当前节点值 = “1 + 左上角的值”:“0”
                        d[i, j] = str1[i] == str2[j] ? 1 + n : 0;
                        //如果是最大值,则记录该值和行号
                        if (d[i, j] > length)
                        {
                            length = d[i, j];
                            index = i;
                        }
                    }
                }
                return str1.Substring(index - length + 1, length);
            }
            #endregion


            /// <summary>
            /// 添加双精度字段
            /// </summary>
            /// <param name="culFeatCls"></param>
            /// <param name="strFieldName"></param>
            private void AddDoubleField(IFeatureClass culFeatCls, string strFieldName)
            {
                IClass pClass = culFeatCls as IClass;
                IFieldsEdit fldsE = culFeatCls.Fields as IFieldsEdit;
                IField fld = new Field();
                IFieldEdit2 fldE = fld as IFieldEdit2;
                fldE.Type_2 = esriFieldType.esriFieldTypeDouble;
                // fldE.Length_2 = 500;
                fldE.Name_2 = strFieldName;
                pClass.AddField(fld);
            }

            /// <summary>
            /// 执行检查未完全采集
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void BTN_BWQCJ_Excute_Click(object sender, EventArgs e)
            {
                if (culHBFtLy==null)
                {
                    MessageBox.Show("请先打开或选择红斑数据", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                if (listCJDFylys==null)
                {
                    MessageBox.Show("请打开采集点数据", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                if (comboBoxBHFields.SelectedIndex==-1)
                {
                    MessageBox.Show("请选择图斑面积字段", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                splashScreenManager1.ShowWaitForm();
                splashScreenManager1.SetWaitFormCaption("执行 不完全采集核查");
                splashScreenManager1.SetWaitFormDescription("请耐心等待..初始化计算...");
                try
                {
                    AddDoubleField(culHBFtLy.FeatureClass, "TotalMJ");//添加总面积字段
                }
                catch{}

                CaculValue(culHBFtLy, null, "TotalMJ", 0.0);//初始化

                for (int i = 0; i < listCJDFylys.Count; i++)
                {
                    IFeatureLayer culCJDFtLy = listCJDFylys[i];
                    splashScreenManager1.SetWaitFormDescription("请耐心等待.. 计算 "+ culCJDFtLy.FeatureClass.AliasName);
                    if (culCJDFtLy.FeatureClass.AliasName=="单户住宅类"|| culCJDFtLy.FeatureClass.AliasName == "多户住宅类")
                    {
                        GetZZLAreaAddFunc(culHBFtLy, null, culCJDFtLy);
                    } 
                    else
                    {
                        //GetFZZLAreaAddFunc(culHBFtLy, null, culCJDFtLy);
                    }
                }
                tlSProgressBar.Value = 0;
                splashScreenManager1.CloseWaitForm();
            }


            /// <summary>
            /// 计算单户住宅类和多户住宅类的面积相加
            /// </summary>
            /// <param name="culHBFtLayer">红斑要素类</param>
            /// <param name="strSQL"></param>
            /// <param name="culCJDFtLayer">采集点</param>
            private void GetZZLAreaAddFunc(IFeatureLayer culHBFtLayer, string strSQL, IFeatureLayer culCJDFtLayer)
            {
                IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = "";
                //pFeatureSelection = mianfeatureLayer as IFeatureSelection;
               int maxCount= culHBFtLayer.FeatureClass.FeatureCount(pQueryFilter);
                tlSProgressBar.Maximum = maxCount;
                tlSProgressBar.Minimum = 0;
                IFeatureCursor pfCursor = culHBFtLayer.Search(pQueryFilter, false);
                IFeature pmianFeature = pfCursor.NextFeature();
                int kk = 0;
                while (pmianFeature != null)
                {
                    Console.WriteLine(kk++);
                    tlSProgressBar.Value = kk;
                    int fieldTotal = pmianFeature.Fields.FindField("TotalMJ");//红斑-叠加的总面积字段索引

                    IGeometry pGeometry = pmianFeature.Shape;
                    ISpatialFilter spatialFilter = new SpatialFilter();
                    spatialFilter.Geometry = pGeometry;
                    spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
                    IFeatureSelection pdianFeatureSelection = culCJDFtLayer as IFeatureSelection;
                    pdianFeatureSelection.SelectFeatures(spatialFilter, esriSelectionResultEnum.esriSelectionResultNew, false);
                    ISelectionSet pSelectionSet = pdianFeatureSelection.SelectionSet;
                    int intCount = pSelectionSet.Count;
                    //定义ICursor接口的游标以遍历整个选择集
                    ICursor cursor;
                    //使用ISelectionSet接口的Search方法,使用null作为查询过滤器,cursor作为返回值获取整个选择集
                    pSelectionSet.Search(null, false, out cursor);
                    IFeatureCursor pdianEnumFeature = cursor as IFeatureCursor;
                    //IEnumFeature pdianEnumFeature = pSelectionSet as IEnumFeature;
                    IFeature pdianFeature = pdianEnumFeature.NextFeature();

                    while (pdianFeature != null)
                    {
                        int fieldFwzdMJ = pdianFeature.Fields.FindField("fwzdmj");//采集点-房屋占地面积字段索引
                        int fieldFsssMJ = pdianFeature.Fields.FindField("fsssmj");//采集点-附属设施面积字段索引
                        double dbTatalMJ = 0;
                        try
                        {
                            dbTatalMJ = Convert.ToDouble(pmianFeature.Value[fieldTotal]);
                        }
                        catch 
                        {
                            dbTatalMJ = 0;
                        }
                        double dbFwzdMJ = Convert.ToDouble(pdianFeature.Value[fieldFwzdMJ]);
                        try
                        {
                            dbFwzdMJ = Convert.ToDouble(pdianFeature.Value[fieldFwzdMJ]);
                        }
                        catch
                        {
                            dbFwzdMJ = 0;
                        }

                        double FsssMJ = Convert.ToDouble(pdianFeature.Value[fieldFsssMJ]);
                        try
                        {
                            FsssMJ = Convert.ToDouble(pdianFeature.Value[fieldFsssMJ]);
                        }
                        catch
                        {
                            FsssMJ = 0;
                        }
                        double newTatalMJ = dbTatalMJ + dbFwzdMJ + FsssMJ;
                        pmianFeature.set_Value(fieldTotal, newTatalMJ);
                        pmianFeature.Store();

                        pdianFeature = pdianEnumFeature.NextFeature();
                    }
                    pmianFeature = pfCursor.NextFeature();
                }
            }
            /// <summary>
            /// 计算非住宅类的面积相加
            /// </summary>
            /// <param name="culHBFtLayer">红斑要素类</param>
            /// <param name="strSQL"></param>
            /// <param name="culCJDFtLayer">采集点</param>
            private void GetFZZLAreaAddFunc(IFeatureLayer culHBFtLayer, string strSQL, IFeatureLayer culCJDFtLayer)
            {
                IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = "";
                //pFeatureSelection = mianfeatureLayer as IFeatureSelection;

                IFeatureCursor pfCursor = culHBFtLayer.Search(pQueryFilter, false);
                IFeature pmianFeature = pfCursor.NextFeature();
                while (pmianFeature != null)
                {
                    int fieldTotal = pmianFeature.Fields.FindField("TotalMJ");//红斑-叠加的总面积字段索引

                    IGeometry pGeometry = pmianFeature.Shape;
                    ISpatialFilter spatialFilter = new SpatialFilter();
                    spatialFilter.Geometry = pGeometry;
                    spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
                    IFeatureSelection pdianFeatureSelection = culCJDFtLayer as IFeatureSelection;
                    pdianFeatureSelection.SelectFeatures(spatialFilter, esriSelectionResultEnum.esriSelectionResultNew, false);
                    ISelectionSet pSelectionSet = pdianFeatureSelection.SelectionSet;
                    int intCount = pSelectionSet.Count;
                    //定义ICursor接口的游标以遍历整个选择集
                    ICursor cursor;
                    //使用ISelectionSet接口的Search方法,使用null作为查询过滤器,cursor作为返回值获取整个选择集
                    pSelectionSet.Search(null, false, out cursor);
                    IFeatureCursor pdianEnumFeature = cursor as IFeatureCursor;
                    //IEnumFeature pdianEnumFeature = pSelectionSet as IEnumFeature;
                    IFeature pdianFeature = pdianEnumFeature.NextFeature();

                    while (pdianFeature != null)
                    {
                        int fieldFwzdMJ = pdianFeature.Fields.FindField("fwzdmj");//采集点-房屋占地面积字段索引
                        double dbTatalMJ = 0;
                        try
                        {
                            dbTatalMJ = Convert.ToDouble(pmianFeature.Value[fieldTotal]);
                        }
                        catch
                        {
                            dbTatalMJ = 0;
                        }
                        double dbFwzdMJ = Convert.ToDouble(pdianFeature.Value[fieldFwzdMJ]);
                        try
                        {
                            dbFwzdMJ = Convert.ToDouble(pdianFeature.Value[fieldFwzdMJ]);
                        }
                        catch
                        {
                            dbFwzdMJ = 0;
                        }
                        double newTatalMJ = dbTatalMJ + dbFwzdMJ;
                        pmianFeature.set_Value(fieldTotal, newTatalMJ);
                        pmianFeature.Store();

                        pdianFeature = pdianEnumFeature.NextFeature();
                    }

                    pmianFeature = pfCursor.NextFeature();
                }
            }
            #region 面要素所在GDB

            private void txtEd_BWQCJ_MGDB_DragDrop(object sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
                {
                    string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
                    if (files.Length > 1)
                    {
                        MessageBox.Show("只允许拖拽一个文件", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    // Directory.
                    string strExtension = System.IO.Path.GetExtension(files[0]);
                    if (strExtension != ".gdb")
                    {
                        MessageBox.Show("不能选择文件", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    txtEd_BWQCJ_MGDB.Text = files[0];
                }
            }

            private void txtEd_BWQCJ_MGDB_DragEnter(object sender, DragEventArgs e)
            {
                e.Effect = DragDropEffects.All;
            }

            private void txtEd_BWQCJ_MGDB_DragOver(object sender, DragEventArgs e)
            {
                e.Effect = DragDropEffects.All;
            }
    #endregion

            #region 采集点要素所在GDB
     private void txtEd_BWQCJ_DGDB_DragDrop(object sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
                {
                    string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
                    if (files.Length > 1)
                    {
                        MessageBox.Show("只允许拖拽一个文件", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    // Directory.
                    string strExtension = System.IO.Path.GetExtension(files[0]);
                    if (strExtension != ".gdb")
                    {
                        MessageBox.Show("不能选择文件", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    txtEd_BWQCJ_DGDB.Text = files[0];
                }
            }

            private void txtEd_BWQCJ_DGDB_DragEnter(object sender, DragEventArgs e)
            {
                e.Effect = DragDropEffects.All;
            }

            private void txtEd_BWQCJ_DGDB_DragOver(object sender, DragEventArgs e)
            {
                e.Effect = DragDropEffects.All;
            }

            #endregion

            private void btn_BWQCJ_MGDB_Click(object sender, EventArgs e)
            {
                MyFolderBrowserDialog mfbd = new MyFolderBrowserDialog();
                if (mfbd.ShowDialog(this) == DialogResult.OK)
                {
                    txtEd_BWQCJ_MGDB.Text = mfbd.DirectoryPath;
                }
            }

            private void BTN_BWQCJ_DGDB_Click(object sender, EventArgs e)
            {
                MyFolderBrowserDialog mfbd = new MyFolderBrowserDialog();
                if (mfbd.ShowDialog(this) == DialogResult.OK)
                {
                    txtEd_BWQCJ_DGDB.Text = mfbd.DirectoryPath;
                }
            }
            
            /// <summary>
            /// 其他-读取红斑要素类
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void txtEd_BWQCJ_MGDB_EditValueChanged(object sender, EventArgs e)
            {
                listHBFylys = getHBFtLyFunc(txtEd_BWQCJ_MGDB.Text);
            }

            /// <summary>
            /// 当前选择的红斑要素类
            /// </summary>
            private IFeatureLayer culHBFtLy = null;
            /// <summary>
            /// 其他-红斑要素类集合
            /// </summary>
            private List<IFeatureLayer> listHBFylys = null;
            /// <summary>
            /// 其他-获取红斑要素类集合非法
            /// </summary>
            /// <param name="strGDB_Path"></param>
            /// <returns></returns>
            private List<IFeatureLayer> getHBFtLyFunc(string strGDB_Path)
            {
                cmbx_BWQCJ_MGDB.Items.Clear();
                List<IFeatureLayer> listFL = new List<IFeatureLayer>();
                FileGDBWorkspaceFactory fac = new FileGDBWorkspaceFactory();
                IFeatureWorkspace pFtWS = (IFeatureWorkspace)fac.OpenFromFile(strGDB_Path, 0);
                IWorkspace pWork = (IWorkspace)pFtWS;
                IEnumDataset pEnumDs = pWork.get_Datasets(esriDatasetType.esriDTFeatureClass);
                IDataset pDs = pEnumDs.Next();
                while (pDs != null)
                {
                    IFeatureClass temp = pDs as IFeatureClass;
                    IFeatureLayer tempLayer = new FeatureLayer();
                    tempLayer.FeatureClass = temp;
                    tempLayer.Name = tempLayer.FeatureClass.AliasName;
                    cmbx_BWQCJ_MGDB.Items.Add(tempLayer.Name);
                    listFL.Add(tempLayer);
                    pDs = pEnumDs.Next();
                }
                return listFL;
            }


            /// <summary>
            /// 其他-采集点要素类集合
            /// </summary>
            private List<IFeatureLayer> listCJDFylys = null;
            /// <summary>
            /// 其他-获取采集点要素类集合
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void txtEd_BWQCJ_DGDB_EditValueChanged(object sender, EventArgs e)
            {
                listCJDFylys = getCJDFtLyFunc(txtEd_BWQCJ_DGDB.Text);
            }
            /// <summary>
            /// 其他-获取采集点要素类集合非法
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private List<IFeatureLayer> getCJDFtLyFunc(string strGDB_Path)
            {
                listBoxControlCJD.Items.Clear();
                List<IFeatureLayer> listFL = new List<IFeatureLayer>();
                FileGDBWorkspaceFactory fac = new FileGDBWorkspaceFactory();
                IFeatureWorkspace pFtWS = (IFeatureWorkspace)fac.OpenFromFile(strGDB_Path, 0);
                IWorkspace pWork = (IWorkspace)pFtWS;
                IEnumDataset pEnumDs = pWork.get_Datasets(esriDatasetType.esriDTFeatureClass);
                IDataset pDs = pEnumDs.Next();
                while (pDs != null)
                {
                    IFeatureClass temp = pDs as IFeatureClass;
                    IFeatureLayer tempLayer = new FeatureLayer();
                    tempLayer.FeatureClass = temp;
                    tempLayer.Name = tempLayer.FeatureClass.AliasName;
                    listBoxControlCJD.Items.Add(tempLayer.Name);
                    listFL.Add(tempLayer);
                    pDs = pEnumDs.Next();
                }
                return listFL;
            }


            ///// <summary>
            ///// 当前选择的 要素字段集合
            ///// </summary>
            //List<IField> listCulSelField = null;


            /// <summary>
            /// 其他-获取当前选择的红斑要素类
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void cmbx_BWQCJ_MGDB_SelectedIndexChanged(object sender, EventArgs e)
            {
                culHBFtLy = listHBFylys[cmbx_BWQCJ_MGDB.SelectedIndex];
                comboBoxBHFields.Items.Clear();
                comboBoxBHFields.SelectedItem = null;
                int FieldCounts = culHBFtLy.FeatureClass.Fields.FieldCount;
                for (int i = 0; i < FieldCounts; i++)
                {
                    //listCulSelField.Add(culHBFtLy.FeatureClass.Fields.get_Field(i));
                    comboBoxBHFields.Items.Add(culHBFtLy.FeatureClass.Fields.get_Field(i).AliasName);
                }
            }


            /// <summary>
            /// 转换前检查-检查结果统计-按错误类型统计
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btn_unck_JCJGTJ_Click(object sender, EventArgs e)
            {
                //JCJGTJ_ModelCls
                if (listFLayerZHQ_Check == null)
                {
                    MessageBox.Show("没有数据可统计!请先打开数据", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                MyFolderBrowserDialog mfbd = new MyFolderBrowserDialog();
                if (mfbd.ShowDialog(this) == DialogResult.OK)
                {
                    string strSaveFolder=   mfbd.DirectoryPath;
                    splashScreenManager1.ShowWaitForm();
                    splashScreenManager1.SetWaitFormCaption("执行 检查结果统计");

                    for (int i = 0; i < listFLayerZHQ_Check.Count; i++)
                    {
                        IFeatureLayer culTempFtLy = listFLayerZHQ_Check[i];
                        string strculFtLyName = culTempFtLy.FeatureClass.AliasName;

                        listBox_unck_FtLy.SelectedValue = strculFtLyName;
                        listBox_unck_FtLy.Refresh();

                        splashScreenManager1.SetWaitFormDescription("请耐心等待... 统计 " + strculFtLyName + " 中");
                        int kk = culTempFtLy.FeatureClass.FindField("CheckResult");
                        if (kk != -1)
                        {
                            string strSavePath = strSaveFolder + "\" + strculFtLyName + "_检查结果统计.xlsx";
                            try { File.Delete(strSavePath); }
                            catch { }
                            Dictionary<string, int> dicJCJGTJ=JCJGTJByLX_Func(culTempFtLy, null);
                            int intTotal = 0;
                            foreach (var temp in dicJCJGTJ)
                            {
                                intTotal += temp.Value;
                            }
                            dicJCJGTJ.Add("合计", intTotal);
                            splashScreenManager1.SetWaitFormDescription("请耐心等待... 保存中");
                            using (var excel = new ExcelPackage(new FileInfo(strSavePath)))
                            {
                                //创建一个工作表
                                var ws = excel.Workbook.Worksheets.Add("Sheet1");
                                ws.Cells[1, 1].Value = "问题描述";
                                //ws.Cells[1 + 2, 1].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                                //ws.Cells[1 + 2, 1].Style.VerticalAlignment = ExcelVerticalAlignment.Center;

                                ws.Cells[1, 2].Value = "数量";
                                //ws.Cells[1, 2].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                                //ws.Cells[1, 2].Style.VerticalAlignment = ExcelVerticalAlignment.Center;
                                int bj = 0;
                                foreach (var temp in dicJCJGTJ)
                                {
                                    ws.Cells[bj + 2, 1].Value = temp.Key;
                                    //ws.Cells[bj + 2, 1].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                                    //ws.Cells[bj + 2, 1].Style.VerticalAlignment = ExcelVerticalAlignment.Center;

                                    ws.Cells[bj + 2, 2].Value = temp.Value;
                                    //ws.Cells[bj + 2, 2].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                                    //ws.Cells[bj + 2, 2].Style.VerticalAlignment = ExcelVerticalAlignment.Center;
                                    bj++;
                                }
                                ws.Cells.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
                                ws.Cells.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;

                                ws.Column(1).AutoFit();
                                ws.Column(2).AutoFit();
                                //保存表格信息
                                excel.Save();
                            }
                        }
                    }
                    splashScreenManager1.CloseWaitForm();
                    tlSProgressBar.Value = 0;
                    DialogResult dirlt=  MessageBox.Show("处理完成,是否打开?", "提示信息", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                    if (dirlt==DialogResult.OK)
                    {
                        Process.Start(strSaveFolder);
                    }
                }
            }
            
            /// <summary>
            /// 按错误类型统计
            /// </summary>
            /// <param name="culTempFtLy"></param>
            /// <param name="strSQL"></param>
            /// <returns></returns>
            private Dictionary<string, int> JCJGTJByLX_Func(IFeatureLayer culTempFtLy,string strSQL)
            {
                Dictionary<string, int> dicJCJGTJ = new Dictionary<string, int>();
                ITable table = culTempFtLy.FeatureClass as ITable;
                IQueryFilter pQueryFilter = (IQueryFilter)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("FDFEBD95-ED75-11D0-9A95-080009EC734B")));
                //IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = strSQL;
                // pQueryFilter.SubFields = caculFieldName;
                ICursor cursor = table.Update(pQueryFilter, false);
                ESRI.ArcGIS.Geodatabase.IRow Row = cursor.NextRow();
                if (Row == null)
                    return null;
                int fieldCheckResult = Row.Fields.FindField("CheckResult");
                int maxCount = table.RowCount(pQueryFilter);
                tlSProgressBar.Minimum = 0;
                tlSProgressBar.Maximum = maxCount;
                for (int i = 0; i < maxCount; i++)
                {
                    tlSProgressBar.Value = i;
                    string strCheckResult = Row.Value[fieldCheckResult].ToString();
                    if (!String.IsNullOrEmpty(strCheckResult))
                    {
                        string[] strArr=  strCheckResult.Split(';');
                        for (int j = 0; j < strArr.Length; j++)
                        {
                            string strTemp = strArr[j];
                            if (!String.IsNullOrEmpty(strTemp))
                            {
                                if (dicJCJGTJ.ContainsKey(strTemp))
                                {
                                    dicJCJGTJ[strTemp] = dicJCJGTJ[strTemp] + 1;
                                } 
                                else
                                {
                                    dicJCJGTJ.Add(strTemp, 1);
                                }
                            }
                        }
                    }

                    Row = cursor.NextRow();
                }
                Marshal.ReleaseComObject(pQueryFilter);
                return dicJCJGTJ;
            }

            /// <summary>
            /// 用于验证身份证的要素类
            /// </summary>
            private IFeatureLayer pcheckSFZ_FtLy = null;
            /// <summary>
            /// 身份证必填及合法性检查
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btn_unck_ExcuteFSZ_Click(object sender, EventArgs e)
            {
               if (pcheckSFZ_FtLy == null)
               {
                    MessageBox.Show("请打开数据或选择图层!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
                    return;
               }

                try
                {
                    AddStringField(pcheckSFZ_FtLy.FeatureClass, "sfzh_Check");
                }
                catch
                {
                    Console.WriteLine("添加字段失败");
                }
                //CaculValue(pcheckSFZ_FtLy, null, "sfzh_Check", ";");
                splashScreenManager1.ShowWaitForm();
                splashScreenManager1.SetWaitFormCaption("执行 sfzh验证");
                splashScreenManager1.SetWaitFormDescription("请耐心等待...sfzh必填验证中");
                string strSQL = "sfzh='' or sfzh is null";
                CaculValue(pcheckSFZ_FtLy, strSQL, "sfzh_Check", "sfzh必填");

                splashScreenManager1.SetWaitFormDescription("请耐心等待...sfzh合法验证中");
                strSQL = "sfzh<>'' and sfzh is not null";
                Check_SFZH_Islegal(pcheckSFZ_FtLy, strSQL, "sfzh_Check", "sfzh非法");

                tlSProgressBar.Value = 0;
                splashScreenManager1.CloseWaitForm();
                MessageBox.Show("验证完成!验证结果保存在字段"sfzh_Check"中", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            /// <summary>
            /// 验证身份证合法性
            /// </summary>
            /// <param name="tempLayer"></param>
            /// <param name="strSQL"></param>
            /// <param name="strSaveFieldName"></param>
            /// <param name="strDiscription"></param>
            private void Check_SFZH_Islegal(IFeatureLayer tempLayer,string strSQL,string strSaveFieldName,string strDiscription)
            {
                ITable table = tempLayer.FeatureClass as ITable;
                IQueryFilter pQueryFilter = (IQueryFilter)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("FDFEBD95-ED75-11D0-9A95-080009EC734B")));
                //IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = strSQL;
                // pQueryFilter.SubFields = caculFieldName;

                ICursor cursor = table.Update(pQueryFilter, false);
                ESRI.ArcGIS.Geodatabase.IRow Row = cursor.NextRow();
                if (Row == null)
                    return;
                int maxCount = table.RowCount(pQueryFilter);
                tlSProgressBar.Minimum = 0;
                tlSProgressBar.Maximum = maxCount;
                int field = Row.Fields.FindField("sfzh");
                int fieldSave = Row.Fields.FindField(strSaveFieldName);
                for (int i = 0; i < maxCount; i++)
                {
                    tlSProgressBar.Value = i;
                    string sfzh_Value = Row.Value[field].ToString();
                    //验证
                    bool isRight=IDcardsNoVerifyCls.IDcards_isright(sfzh_Value);
                    //string strCheckBirthDay = Check_BirthDay_Islegal(sfzh_Value);
                    if (isRight==false)
                    {
                        string strCheckDiscrib=IDcardsNoVerifyCls.MyIDcards_isright(sfzh_Value);
                        if(strCheckDiscrib!="")
                        {
                            Row.Value[fieldSave] = strDiscription + " " + strCheckDiscrib;
                        }
                        else
                        {
                            Row.Value[fieldSave] = strDiscription;
                        }

                        //if (strCheckBirthDay!="")
                        //{
                        //    Row.Value[fieldSave] = strDiscription + " " + strCheckBirthDay;
                        //}
                        //else
                        //{
                        //    Row.Value[fieldSave] = strDiscription;
                        //}
                        cursor.UpdateRow(Row);
                    }
                    Row = cursor.NextRow();
                }
            }

            private string Check_BirthDay_Islegal(string idNumber)
            {
                string birth = String.Empty;
                if (idNumber.Length==18)
                {
                    birth = idNumber.Substring(6, 8).Insert(6, "-").Insert(4, "-");
                }
                else if (idNumber.Length == 15)
                {
                    birth = idNumber.Substring(6, 6).Insert(4, "-").Insert(2, "-");
                }
                DateTime time = new DateTime();
                if (DateTime.TryParse(birth, out time) == false)
                {
                    return "生日验证失败=" + birth;
                    //return false;//生日验证  
                }
                return "";
            }
            /// <summary>
            /// 获取待验证身份证的图层
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void tspCombx_unck_SFZ_SelectedIndexChanged(object sender, EventArgs e)
            {
                if(tspCombx_unck_SFZ.SelectedIndex==-1)
                {
                    return;
                }
                try
                {
                    pcheckSFZ_FtLy = listFLayerZHQ_Check[tspCombx_unck_SFZ.SelectedIndex];
                }
                catch (System.Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
               int indexField= pcheckSFZ_FtLy.FeatureClass.FindField("sfzh");
                if (indexField==-1)
                {
                    MessageBox.Show("所选择的图层没有"sfzh"字段,请重新选择!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);

                    tspCombx_unck_SFZ.SelectedItem = null;
                    pcheckSFZ_FtLy = null;
                }
            }

            private string StrSaveXMLPath = null;
            private void MainForm_Load(object sender, EventArgs e)
            {

                //barButtonItem1.Enabled = false;
                //barButtonItem3.Enabled = false;
                //barButtonItem5.Enabled = false;
                //barButtonItem6.Enabled = false;
                //barButtonItem7.Enabled = false;
                //barButtonItem8.Enabled = false;

                int winWidth = Convert.ToInt32(XmlCls.ReadXml(StrSaveXMLPath, "winWidth"));
                int winHeight= Convert.ToInt32(XmlCls.ReadXml(StrSaveXMLPath, "winHeight"));
                this.Width = winWidth;
                this.Height = winHeight;

                this.Location = new System.Drawing.Point(Convert.ToInt32(XmlCls.ReadXml(StrSaveXMLPath, "LocationX")), Convert.ToInt32(XmlCls.ReadXml(StrSaveXMLPath, "LocationY")));


                bool IsMaxShowMainForn= Convert.ToBoolean(XmlCls.ReadXml(StrSaveXMLPath, "IsMaxShowMainForn"));
                if(IsMaxShowMainForn==true)
                {
                    this.WindowState = FormWindowState.Maximized;
                }
                else if (IsMaxShowMainForn == false)
                {
                    this.WindowState = FormWindowState.Normal;
                }

                bool isShowAll= Convert.ToBoolean(XmlCls.ReadXml(StrSaveXMLPath, "showAll"));
                bool isNotShowAll = Convert.ToBoolean(XmlCls.ReadXml(StrSaveXMLPath, "NotshowAll"));
                bool isShowZHQ_Only = Convert.ToBoolean(XmlCls.ReadXml(StrSaveXMLPath, "showZHQ_Only"));
                if (isShowAll == true)
                {
                    xtraTabPage1.PageVisible = true;
                    xtraTabPage2.PageVisible = true;
                    xtraTabPage3.PageVisible = true;
                    xtraTabPage4.PageVisible = true;
                    xtraTabPage5.PageVisible = true;
                    xtraTabControl1.Show();
                }
                else
                {
                    if (isNotShowAll == true)
                    {
                        xtraTabPage1.PageVisible = false;
                        xtraTabPage2.PageVisible = false;
                        xtraTabPage3.PageVisible = false;
                        xtraTabPage4.PageVisible = false;
                        xtraTabPage5.PageVisible = false;
                        xtraTabControl1.Hide();
                    }
                    else
                    {
                        if (isShowZHQ_Only == true)
                        {
                            xtraTabPage1.PageVisible = true;
                            xtraTabPage2.PageVisible = false;
                            xtraTabPage3.PageVisible = false;
                            xtraTabPage4.PageVisible = false;
                            xtraTabPage5.PageVisible = false;
                            xtraTabControl1.Show();
                        }
                        else if (isShowZHQ_Only == false)
                        {
                            xtraTabPage1.PageVisible = false;
                            xtraTabPage2.PageVisible = false;
                            xtraTabPage3.PageVisible = false;
                            xtraTabPage4.PageVisible = false;
                            xtraTabPage5.PageVisible = false;
                            xtraTabControl1.Hide();
                        }
                    }
                }
            }
          
            private void xtraTabControl1_SelectedPageChanged(object sender, DevExpress.XtraTab.TabPageChangedEventArgs e)
            {
                try
                {
                    tlSpStLb.Text = "  选项:" + xtraTabControl1.SelectedTabPage.Text;
                }
                catch (System.Exception ex)
                {
                    tlSpStLb.Text = "";
                }
            }

            private void xtraTabControl1_CloseButtonClick(object sender, EventArgs e)
            {
                //xtraTabControl1.se
                //xtraTabControl1.ShowHeaderFocus = DevExpress.Utils.DefaultBoolean.False;
                //xtraTabControl1.SelectedTabPage.Hide();
                //xtraTabControl1.SelectedTabPage.PageVisible = true;
                //xtraTabControl1.SelectedTabPage.Dispose();
                ClosePageButtonEventArgs arg=e as ClosePageButtonEventArgs;
                (arg.Page as XtraTabPage).PageVisible = false;

                if (xtraTabPage1.PageVisible == false&& xtraTabPage2.PageVisible == false&& xtraTabPage3.PageVisible == false && xtraTabPage4.PageVisible == false && xtraTabPage5.PageVisible == false)
                {
                    xtraTabControl1.Hide();
                }

            }

            private void barButtonItem2_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
            {
                xtraTabControl1.Show();
                xtraTabPage1.PageVisible = true;
                xtraTabControl1.SelectedTabPage = xtraTabPage1;
            }

            private void barButtonItem3_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
            {
                xtraTabControl1.Show();
                xtraTabPage2.PageVisible = true;
                xtraTabControl1.SelectedTabPage = xtraTabPage2;
            }

            private void barButtonItem5_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
            {
                xtraTabControl1.Show();
                xtraTabPage3.PageVisible = true;
                xtraTabControl1.SelectedTabPage = xtraTabPage3;
            }

            private void barButtonItem6_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
            {
                xtraTabControl1.Show();
                xtraTabPage4.PageVisible = true;
                xtraTabControl1.SelectedTabPage = xtraTabPage4;
            }

            private void barButtonItem7_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
            {
                xtraTabControl1.Show();
                xtraTabPage5.PageVisible = true;
                xtraTabControl1.SelectedTabPage = xtraTabPage5;
            }

            private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
            {
                xtraTabControl1.Show();
                xtraTabPage1.PageVisible = true;
                xtraTabPage2.PageVisible = true;
                xtraTabPage3.PageVisible = true;
                xtraTabPage4.PageVisible = true;
                xtraTabPage5.PageVisible = true;
            }

            private void barButtonItem8_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
            {
                xtraTabPage1.PageVisible = false;
                xtraTabPage2.PageVisible = false;
                xtraTabPage3.PageVisible = false;
                xtraTabPage4.PageVisible = false;
                xtraTabPage5.PageVisible = false;
                xtraTabControl1.Hide();
            }

            /// <summary>
            /// 关于
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void barButtonItem9_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
            {
                FormAbout pFormAbout = new FormAbout();
                pFormAbout.ShowDialog();
            }

            /// <summary>
            /// 按错误条目统计
            /// </summary>
            /// <param name="culTempFtLy"></param>
            /// <param name="strSQL"></param>
            /// <returns></returns>
            private int JCJGTJByTM_Func(IFeatureLayer culTempFtLy, string strSQL)
            {
                int defaultCount = 0;
                ITable table = culTempFtLy.FeatureClass as ITable;
                IQueryFilter pQueryFilter = (IQueryFilter)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("FDFEBD95-ED75-11D0-9A95-080009EC734B")));
                //IQueryFilter pQueryFilter = new QueryFilter();
                pQueryFilter.WhereClause = strSQL;
                // pQueryFilter.SubFields = caculFieldName;
                ICursor cursor = table.Update(pQueryFilter, false);
                ESRI.ArcGIS.Geodatabase.IRow Row = cursor.NextRow();
                if (Row == null)
                    return 0;
                int fieldCheckResult = Row.Fields.FindField("CheckResult");
                int maxCount = table.RowCount(pQueryFilter);
                tlSProgressBar.Minimum = 0;
                tlSProgressBar.Maximum = maxCount;
                for (int i = 0; i < maxCount; i++)
                {
                    tlSProgressBar.Value = i;
                    string strCheckResult = Row.Value[fieldCheckResult].ToString();
                    if (!String.IsNullOrEmpty(strCheckResult))
                    {
                        strCheckResult = strCheckResult.Replace("cjybz不能为空;","");
                        strCheckResult = strCheckResult.Replace("fhr不能为空;", "");
                        strCheckResult = strCheckResult.Replace("shr不能为空;", "");
                        if (strCheckResult!=";")
                        {
                            defaultCount++;
                        }
                    }

                    Row = cursor.NextRow();
                }
                    return defaultCount;
            }

            /// <summary>
            /// 转换前检查-检查结果统计-按错误条目统计
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btn_unck_JCJGTJByTM_Click(object sender, EventArgs e)
            {
                if (listFLayerZHQ_Check == null)
                {
                    MessageBox.Show("没有数据可统计!请先打开数据", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Filter = "(Excel文件)|*.xlsx";
                sfd.Title = "检查结果统计-按错误条目统计结果";
                sfd.FileName = System.IO.Path.GetFileNameWithoutExtension(strZHQSelGDBPath) + "_" + "按错误条目统计结果";
                sfd.AddExtension = true;
                if (sfd.ShowDialog() == DialogResult.OK)
                {
                    string strSavePath = sfd.FileName;
                    try { File.Delete(strSavePath); }
                    catch {
                        MessageBox.Show("文件存在并且被占用","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
                        return;
                    }
                    List<StaticByTM_ModelCls> listStaticTMS = new List<StaticByTM_ModelCls>();

                    splashScreenManager1.ShowWaitForm();
                    splashScreenManager1.SetWaitFormCaption("执行 检查结果统计-按错误条目");

                    for (int i = 0; i < listFLayerZHQ_Check.Count; i++)
                    {
                        StaticByTM_ModelCls tempModel = new StaticByTM_ModelCls();
                        IFeatureLayer culTempFtLy = listFLayerZHQ_Check[i];
                        string strculFtLyName = culTempFtLy.FeatureClass.AliasName;
                        tempModel.strLX = strculFtLyName;

                        splashScreenManager1.SetWaitFormDescription("请耐心等待... 统计 " + strculFtLyName + " 中");

                        tempModel.countTMS = culTempFtLy.FeatureClass.FeatureCount(null);

                        listBox_unck_FtLy.SelectedValue = strculFtLyName;
                        listBox_unck_FtLy.Refresh();

                        int kk = culTempFtLy.FeatureClass.FindField("CheckResult");
                        if (kk != -1)
                        {
                            tempModel.countCWTMS = JCJGTJByTM_Func(culTempFtLy, null);
                        }
                        tempModel.BL = (Convert.ToDouble(tempModel.countCWTMS) / tempModel.countTMS).ToString("P2");

                        listStaticTMS.Add(tempModel);
                    }
                    StaticByTM_ModelCls tempModelTotal = new StaticByTM_ModelCls();
                    for (int i = 0; i < listStaticTMS.Count; i++)
                    {
                        tempModelTotal.countTMS += listStaticTMS[i].countTMS;
                        tempModelTotal.countCWTMS += listStaticTMS[i].countCWTMS;
                    }
                    tempModelTotal.strLX = "合计";
                    tempModelTotal.BL = (Convert.ToDouble(tempModelTotal.countCWTMS) / tempModelTotal.countTMS).ToString("P2");
                    listStaticTMS.Add(tempModelTotal);

                    //写入Excel
                    using (var excel = new ExcelPackage(new FileInfo(strSavePath)))
                    {
                        //创建一个工作表
                        var ws = excel.Workbook.Worksheets.Add("Sheet1");
                        ws.Cells[1, 1].Value = "类型";

                        ws.Cells[1, 2].Value = "条目数";

                        ws.Cells[1, 3].Value = "属性错误条目数";

                        ws.Cells[1, 4].Value = "错误比例";

                        for (int i = 0; i < listStaticTMS.Count; i++)
                        {
                            ws.Cells[i + 2, 1].Value = listStaticTMS[i].strLX;
                            ws.Cells[i + 2, 2].Value = listStaticTMS[i].countTMS;
                            ws.Cells[i + 2, 3].Value = listStaticTMS[i].countCWTMS;
                            ws.Cells[i + 2, 4].Value = listStaticTMS[i].BL;
                        }

                        ws.Cells.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
                        ws.Cells.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                        
                        ws.Column(1).AutoFit();
                        ws.Column(2).AutoFit();
                        ws.Column(3).AutoFit();
                        ws.Column(4).AutoFit();
                        //保存表格信息
                        excel.Save();
                    }
                    splashScreenManager1.CloseWaitForm();
                    tlSProgressBar.Value = 0;
                    try
                    {
                        DialogResult dirlt = MessageBox.Show("处理完成,是否打开?", "提示信息", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                        if (dirlt == DialogResult.OK)
                        {
                            Process.Start(strSavePath);
                        }
                    }
                    catch (System.Exception ex)
                    {}
                }
            }

            /// <summary>
            /// 系统设置
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btn_Settings_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
            {
                FormSettings tempForm = new FormSettings();
                tempForm.getSkinDel = getSkinDel;
                tempForm.ShowDialog();
            }

            /// <summary>
            /// 帮助文档
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btn_OpenHelpDoc_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
            {
                try
                {
                    Process.Start(Directory.GetCurrentDirectory() + "\帮助文档.pdf");
                }
                catch (System.Exception ex)
                {

                }
            }


            /// <summary>
            /// 转换前检查项设置
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btn_CheckItemSet_Click(object sender, EventArgs e)
            {
                FormCheckSet formCheckSet = new FormCheckSet();
                formCheckSet.ShowDialog();
            }

            private void tsBTN_TownManege_Click(object sender, EventArgs e)
            {
                FormTownSet formTownSet = new FormTownSet();
                formTownSet.ShowDialog();
            }

            /// <summary>
            /// 右键执行单独检查
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void listBox_unck_FtLy_MouseUp(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Right)
                {
                    int posindex = listBox_unck_FtLy.IndexFromPoint(new System.Drawing.Point(e.X, e.Y));
                    listBox_unck_FtLy.ContextMenuStrip = null;
                    if (posindex>=0&&posindex<listBox_unck_FtLy.Items.Count)
                    {
                        listBox_unck_FtLy.SelectedIndex = posindex;
                        contextMenuStrip1.Show(listBox_unck_FtLy, new System.Drawing.Point(e.X, e.Y));
                    }
                }
            }


            IFeatureLayer culContextFtLy = null;
            private void listBox_unck_FtLy_SelectedIndexChanged(object sender, EventArgs e)
            {
                try
                {
                    culContextFtLy = listFLayerZHQ_Check[listBox_unck_FtLy.SelectedIndex];
                }
                catch (System.Exception ex)
                {
                    
                }
            }

            private void 单独检查该项ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                if (culContextFtLy==null)
                {
                    return;
                }
                unck_ExcuteFunc(culContextFtLy, true);
            }

            private void ts_BTNCalcuSet_Click(object sender, EventArgs e)
            {
               
            }
        }

    欢迎交流:18798835893

  • 相关阅读:
    性能指标有哪些?
    Jmeter获取数据库数据
    jmeter用什么查看结果报告
    jmeter中assertion的使用
    jmeter进行压测的步骤
    Jenkins 构建方式有几种
    Redis数据类型
    敏捷 还是瀑布 敏捷优缺点
    如何加快数据库查询速度
    智力题总结
  • 原文地址:https://www.cnblogs.com/ArcGISEngine201907121013/p/14209118.html
Copyright © 2011-2022 走看看