private void btnRun_Click(object sender, EventArgs e)
        {
            if (dataGridView1.Rows.Count < 1)
            {
                return;
            }

            ChangedView(true);
            try
            {
                _stopRunning = false;
                var rows = dataGridView1.Rows;
                progressBar1.Maximum = rows.Count;
                foreach (DataGridViewRow row in rows)
                {
                    row.Cells["colResult"].Value = string.Empty;
                }
                Application.DoEvents();

                var layerName      = cmbLayers.SelectedItem.ToString();
                var layer          = dataSourceSelector1.GetLayerByName(layerName);
                var idFieldName    = cmbIdField.SelectedItem.ToString();
                var txtFileDir     = txtTextFileDir.Text.Trim();
                var featureDefn    = layer.GetLayerDefn();
                var idField        = featureDefn.GetFieldDefn(featureDefn.GetFieldIndex(idFieldName));
                var sqlFormat      = idField.GetFieldType() == FieldType.OFTString ? "{0} = '{1}'" : "{0} = {1}";
                var fileNameFormat = cmbNameField.SelectedIndex > 0 ? "{0}_{1}.txt" : "{0}.txt";

                foreach (DataGridViewRow row in rows)
                {
                    if (Convert.ToBoolean(row.Cells["colCheck"].Value) == true)
                    {
                        try
                        {
                            var id       = row.Cells["colID"].Value.ToString();
                            var name     = row.Cells["colName"].Value.ToString();
                            var filePath = Path.Combine(txtFileDir, string.Format(fileNameFormat, id, name));
                            var features = GdalHelper.GetFeatures(layer, string.Format(sqlFormat, idFieldName, id));
                            var txtInfo  = RedLineManager.GetProjInfoFromFeatures(features.ToArray());
                            RedLineManager.ToTxtFile(filePath, txtInfo);

                            row.Cells["colResultPath"].Value = filePath;
                            row.Cells["colResult"].Value     = "成功";
                        }
                        catch (Exception ex)
                        {
                            row.Cells["colResult"].Value = "失败:" + ex.Message;
                        }
                    }
                    progressBar1.Value++;
                    Application.DoEvents();
                    if (_stopRunning)
                    {
                        break;
                    }
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Error); }
            ChangedView(false);
        }