⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 attributequery.cs

📁 利用CSharp二次开发的地理属性查询
💻 CS
📖 第 1 页 / 共 3 页
字号:
				while (i <  arFeature.FieldCount)
				{
					if (bIsStringField ==  true)
					{
						if (arFeature.get_FieldType(i) ==  esriARFieldType.esriARFieldTypeString)
						{
							cboFields.Items.Add(arFeature.get_FieldName(i));
						}
					}
					else
					{
						if ((arFeature.get_FieldType(i) ==  esriARFieldType.esriARFieldTypeDouble) ||  (arFeature.get_FieldType(i) ==  esriARFieldType.esriARFieldTypeInteger) ||  (arFeature.get_FieldType(i) ==  esriARFieldType.esriARFieldTypeSingle) ||  (arFeature.get_FieldType(i) ==  esriARFieldType.esriARFieldTypeSmallInteger) ||  (arFeature.get_FieldType(i) ==  esriARFieldType.esriARFieldTypeOID))
						{
							cboFields.Items.Add(arFeature.get_FieldName(i));
						}
					}
				
					i = i+ 1;

					if(cboFields.Items.Count != 0)
					{
						cboFields.SelectedIndex=0;
					}
				};
			}
			catch 
			{
				MessageBox.Show("An error occurred populating the Field ComboBox.");
			}
		}
		private void PopulateOperators(bool bIsStringField)
		{
			// Clear any current values from combo
			cboOperator.Items.Clear();

			if (bIsStringField ==  true)
			{
				cboOperator.Items.Insert(0, "=");
				cboOperator.Items.Insert(1, "<>");
			}
			else
			{
				cboOperator.Items.Insert(0, "=");
				cboOperator.Items.Insert(1, "<>");
				cboOperator.Items.Insert(2, ">");
				cboOperator.Items.Insert(3, ">=");
				cboOperator.Items.Insert(4, "<=");
				cboOperator.Items.Insert(5, "<");
			}

			cboOperator.SelectedIndex = 0;

		}
		private void PopulateInverseOperators()
		{
			InverseOperator[0].input = "=";
			InverseOperator[0].inverse = "<>";
			InverseOperator[1].input = "<>";
			InverseOperator[1].inverse = "=";
			InverseOperator[2].input = ">";
			InverseOperator[2].inverse = "<=";
			InverseOperator[3].input = ">=";
			InverseOperator[3].inverse = "<";
			InverseOperator[4].input = "<=";
			InverseOperator[4].inverse = ">";
			InverseOperator[5].input = "<";
			InverseOperator[5].inverse = ">=";
		}
		private void EnableSearchTools(bool EnabledState)
		{	
			txtValue.Text = "";
			optNumber.Enabled = EnabledState;
			optString.Enabled = EnabledState;
			cboFields.Enabled = EnabledState;
			cboOperator.Enabled = EnabledState;
			txtValue.Enabled = EnabledState;
			cmdQuery.Enabled = EnabledState;
		}
		private void EnableMapTools(bool EnabledState)
		{	
			optZoomIn.Enabled = EnabledState;
			optZoomOut.Enabled = EnabledState;
			optPan.Enabled = EnabledState;
			cmdFullExtent.Enabled = EnabledState;
		}
		private void EnableMeetHighlightTools(bool EnabledState)
		{	
			cmdMeetFlash.Enabled = EnabledState;
			cmdMeetZoomTo.Enabled = EnabledState;
			cmdMeetCenterAt.Enabled = EnabledState;
		}
		private void EnableFailHighlightTools(bool EnabledState)
		{	
			cmdFailFlash.Enabled = EnabledState;
			cmdFailZoomTo.Enabled = EnabledState;
			cmdFailCenterAt.Enabled = EnabledState;
		}

		private void cboLayers_SelectedIndexChanged(object sender, System.EventArgs e)
		{
			ARLayer arLayer = (ARLayer)m_LayersIndex[cboLayers.SelectedIndex];
			//Check if layer can be searched
			if (arLayer.Searchable)
			{
				EnableSearchTools(true);
				PopulateFields(optString.Checked);
				PopulateOperators(optString.Checked);
			}
			else
			{
				MessageBox.Show("The Layer you have selected is not Searchable.");
				EnableSearchTools(false);
			}

			//Clear Grids, Labels and disable display tools
			axMSFlexGrid1.Clear();
			axMSFlexGrid2.Clear();
			lblMeets.Text="";
			lblFails.Text="";
			EnableMeetHighlightTools(false);
			EnableFailHighlightTools(false);
		}
		private void cmdQuery_Click(object sender, System.EventArgs e)
		{
			//Set mouse cursor as this can take some time with large datasets
			Cursor.Current = Cursors.WaitCursor;

			//Check value has been entered in field combo
			if (cboFields.Text == "")
			{
				System.Windows.Forms.MessageBox.Show("You have not selected a field.");
				Cursor.Current = Cursors.Default;
				return;
			}

			//Check value has been entered in operator combo
			if (cboOperator.Text == "")
			{
				System.Windows.Forms.MessageBox.Show("You have not selected an operator.");
				Cursor.Current = Cursors.Default;
				return;
			}

			//Check value has been entered in value textbox
			if (txtValue.Text == "")
			{
				System.Windows.Forms.MessageBox.Show("You have not entered a query value.");
				txtValue.Focus();
				Cursor.Current = Cursors.Default;
				return;
			}

			//Get layer to query
			ARMap arMap = axReaderControl1.ARPageLayout.FocusARMap;

			ARLayer arLayer = (ARLayer)m_LayersIndex[cboLayers.SelectedIndex];
	
			//Build the ARSearchDef
			ARSearchDef arSearchDef = new ARSearchDefClass();

			//Build WhereClause that meets search criteria
			string sWhereClause;

			//Remove quotes from WhereClause if search is numeric
			if (optNumber.Checked == true)
			{
				sWhereClause = cboFields.Text + " " + cboOperator.Text + " " + txtValue.Text;
			}
			else
			{
				sWhereClause = cboFields.Text + " " + cboOperator.Text + " '" + txtValue.Text + "'";
			}

			arSearchDef.WhereClause = sWhereClause;

			//Get ARFeatureSet that meets the search criteria
			m_arFeatureSetMeets = arLayer.QueryARFeatures(arSearchDef);

			//Build WhereClause that fails search criteria
			//Remove quotes from WhereClause if search is numeric
			if (optNumber.Checked == true)
			{
				sWhereClause = cboFields.Text + " " + InverseOperator[cboOperator.SelectedIndex].inverse.ToString() + " " + txtValue.Text;
			}
			else
			{
				sWhereClause = cboFields.Text + " " + InverseOperator[cboOperator.SelectedIndex].inverse.ToString() + " '" + txtValue.Text + "'";
			}

			arSearchDef.WhereClause = sWhereClause;

			//Get ARFeatureSet that fails search criteria
			m_arFeatureSetFails = arLayer.QueryARFeatures(arSearchDef);

			//Reset mouse cursor
			Cursor.Current = Cursors.Default;

			//Populate the FlexGrid Controls with the ARFeatureSets
			PopulateFlexGrids(axMSFlexGrid1, m_arFeatureSetMeets);
			PopulateFlexGrids(axMSFlexGrid2, m_arFeatureSetFails);
		

			//Give the user some feedback regarding the number of features that meet criteria
			if (m_arFeatureSetMeets.ARFeatureCount > 0)
			{ 
				EnableMeetHighlightTools(true);
				lblMeets.Text = "Features MEETING the search criteria: " + m_arFeatureSetMeets.ARFeatureCount.ToString();
			}
			else
			{
				EnableMeetHighlightTools(false);
				axMSFlexGrid1.Clear();
				lblMeets.Text = "Features MEETING the search criteria: 0";
			}

			if (m_arFeatureSetFails.ARFeatureCount > 0)
			{
				EnableFailHighlightTools(true);
				lblFails.Text = "Features FAILING the search criteria: " + m_arFeatureSetFails.ARFeatureCount.ToString();
			}
			else
			{
				EnableFailHighlightTools(false);
				axMSFlexGrid2.Clear();
				lblMeets.Text = "Features FAILING the search criteria: 0";
			}

		}
		private void PopulateFlexGrids(AxMSFlexGridLib.AxMSFlexGrid pFlexGrid, ARFeatureSet arFeatureSet)
		{
			//Get first feature in ARFeatureSet
			arFeatureSet.Reset();
			ARFeature arFeature = arFeatureSet.Next();

			//Exit if no features in set
			if (arFeature == null)
			{
				return;
			}

			//Change cursor while grid populates
			Cursor = Cursors.WaitCursor;

			//Clear Grid of any existing data
			pFlexGrid.Clear();

			//Reset the Grid dimensions
			pFlexGrid.Rows = arFeatureSet.ARFeatureCount + 2;
			pFlexGrid.Cols = arFeature.FieldCount + 1;

			int c = 1;
			int r = 1;

			//Loop through and add field names
			while (c < arFeature.FieldCount + 1)
			{
				pFlexGrid.Row = 0;
				pFlexGrid.Col = c;
				pFlexGrid.Text = arFeature.get_FieldName(c - 1);
				c = c + 1;
			}

			//Reset Col Counter
			c = 1;

			//Populate Grid
			while (r < arFeatureSet.ARFeatureCount + 1)
			{
				pFlexGrid.Row = r;

				while (c < arFeature.FieldCount + 1)
				{
					pFlexGrid.Col = c;
					pFlexGrid.Text = ARFeatureValueAsString(arFeature, c - 1);
					c++;
				}
				//Reset Column
				c = 1;
				//Move to next Row
				r = r + 1;
				//Move to next Feature in the FeatureSet
				arFeature = arFeatureSet.Next();
			}
			//Reset mouse cursor
			Cursor = Cursors.Default;
		}
		private string ARFeatureValueAsString(ARFeature pARFeature, int pFieldNameIndex)
		{
			// If there is an issue accessing the value the function returns a string of asterisks
			// There are many reason Asterisks may be returned...
			// The return value cant be cast into a string e.g. a BLOB value
			// The return value is stored within a hidden field in the PMF
			// The return value is a Geometry Object
			try
			{
				string pARFeatureValueAsString = pARFeature.get_Value(pARFeature.get_FieldName(pFieldNameIndex)).ToString();
				return pARFeatureValueAsString;	
			}
			catch
			{
				string pARFeatureValueAsString = "***";
				return pARFeatureValueAsString;	
			}
		}
		public static bool IsDecimal(string theValue)
		{
			//A funticon to mimic the VB.NET VB6 function Is Numeric
			try
			{
				Convert.ToDouble(theValue);
				return true;
			} 
			catch 
			{
				return false;
			}
		}
		private void txtValue_TextChanged(object sender, System.EventArgs e)
		{
			//Prevent user entering no numeric value if querying numeric field
			if (optNumber.Checked==true)
			{
				if (IsDecimal(txtValue.Text) == false)
				{
					txtValue.Clear();
				}
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -