/// <summary> /// This method is responsible for translanting between coded domain names /// and their values, setting into UnderlyingObject the correct value. /// </summary> /// <remarks> /// Imagine a ICodedDomain like: /// 1 = "Alphanumeric" /// 2 = "Geographic" /// /// This method will aways set the value to 1 when passed /// "Alphanumeric" /// </remarks> /// <exception cref="ActiveRecrdAttributeException"></exception> /// <param name="wrapper"></param> /// <param name="propertyName"></param> /// <param name="displayValue"></param> /// <returns></returns> private static void SetDisplayValue(this IActiveRecord wrapper, FieldAttribute fieldAtt, string displayValue) { if (wrapper.UnderlyingObject == null) { FetchUnderlyingObject(wrapper); } if (!(fieldAtt is DomainFieldAttribute)) { throw new ActiveRecordAttributeException(wrapper.GetType(), "O atributo não é tipo domínio."); } DomainFieldAttribute domainField = fieldAtt as DomainFieldAttribute; ICodedValueDomain domain = wrapper.UnderlyingObject.Fields.get_Field(domainField.Index).Domain as ICodedValueDomain; if (domain == null) { throw new ActiveRecordAttributeException(wrapper.GetType(), "Não foi possível localizar o domínio."); } for (var i = 0; i <= domain.CodeCount - 1; i++) { if (domain.get_Name(i) == displayValue) { object codedValue = domain.get_Value(i); wrapper.UnderlyingObject.set_Value(domainField.Index, codedValue); } } }
public string GetDomainDisplay(string domain, object domainValu) { List <String> listDomains = new List <string>(); IDataset dataset = (IDataset)GetWorkspace; IWorkspaceDomains2 domains = (IWorkspaceDomains2)dataset; ICodedValueDomain dom = null; try { dom = (ICodedValueDomain)domains.get_DomainByName(domain); for (int i = 0; i <= dom.CodeCount - 1; i++) { if (dom.get_Value(i).Equals(domainValu)) { return(dom.get_Name(i)); } } } catch (Exception ex) { //_log.Error("Ocorreu um problema ao tentar carregar os domínios do componente SegmentListComponent."); } finally { //if (domains != null) // Marshal.ReleaseComObject(domains); //if (dom != null) // Marshal.ReleaseComObject(dom); //Marshal.ReleaseComObject(dataset); } return(""); }
private string GetCodedValueDomainValue(ICodedValueDomain pDomain, string domainDescription) { string result = "<Null>"; for (int i = 0; i < pDomain.CodeCount; i++) { if (pDomain.get_Name(i) == domainDescription) { result = pDomain.get_Value(i).ToString(); break; } } return(result); }
//复制工作空间坐标空间域 private void CreateWorkspaceDomains(IWorkspace pWs1, IWorkspace pWs2) { try { WaitForm.SetCaption("正在复制工作空间域,请稍后..."); IWorkspaceDomains pWsD1 = pWs1 as IWorkspaceDomains; IWorkspaceDomains pWsD2 = pWs2 as IWorkspaceDomains; IEnumDomain pEnumDomain = pWsD1.Domains; IDomain pDomain1 = null; IDomain pDomain2 = null; if (pEnumDomain == null) { return; } while ((pDomain1 = pEnumDomain.Next()) != null) { if (pDomain1.Type == esriDomainType.esriDTCodedValue)//编码域 { ICodedValueDomain tempDomain1 = pDomain1 as ICodedValueDomain; ICodedValueDomain tempDomain2 = new CodedValueDomainClass(); for (int i = 0; i < tempDomain1.CodeCount; i++) { tempDomain2.AddCode(tempDomain1.get_Value(i), tempDomain1.get_Name(i)); } pDomain2 = tempDomain2 as IDomain; pDomain2.Description = pDomain1.Description; pDomain2.FieldType = pDomain1.FieldType; pDomain2.DomainID = pDomain1.DomainID; pDomain2.MergePolicy = pDomain1.MergePolicy; pDomain2.Name = pDomain1.Name; pDomain2.Owner = pDomain1.Owner; pDomain2.SplitPolicy = pDomain1.SplitPolicy; pWsD2.AddDomain(pDomain2); } else//范围域 { IRangeDomain tempDomain1 = pDomain1 as IRangeDomain; IRangeDomain tempDomain2 = new RangeDomainClass(); tempDomain2.MaxValue = tempDomain1.MaxValue; tempDomain2.MinValue = tempDomain1.MinValue; pDomain2 = tempDomain2 as IDomain; pWsD2.AddDomain(pDomain2); } } } catch (System.Exception ex) { return; } }
/// <summary> /// This method is responsible for translating between coded domain values /// and their names, returning the correct name. /// </summary> /// Imagine a ICodedDomain like: /// 1 = "Alphanumeric" /// 2 = "Geographic" /// /// This method will always return "Alphanumeric" for the value 1, /// fetched from UnderlyingObject /// </remarks> /// <exception cref="ActiveRecrdAttributeException"></exception> /// <param name="wrapper">IActiveRecord</param> /// <param name="propertyName">string</param> /// <returns>string</returns> private static string GetDisplayValue(this IActiveRecord wrapper, FieldAttribute fieldAtt) { if (wrapper.UnderlyingObject == null) { FetchUnderlyingObject(wrapper); } if (!(fieldAtt is DomainFieldAttribute)) { throw new ActiveRecordAttributeException(wrapper.GetType(), "Não é possível obter o atributo de domínio."); } DomainFieldAttribute domainField = fieldAtt as DomainFieldAttribute; ICodedValueDomain domain = wrapper.UnderlyingObject.Fields.get_Field(domainField.Index).Domain as ICodedValueDomain; if (domain == null) { throw new ActiveRecordAttributeException(wrapper.GetType(), String.Format("Não foi possível localizar o domínio {0}.", domainField.DomainName)); } string codedValue = wrapper.UnderlyingObject.get_Value(domainField.Index).ToString(); string displayValue = String.Empty; for (int i = 0; i <= domain.CodeCount - 1; i++) { if (domain.get_Value(i).ToString() == codedValue) { displayValue = domain.get_Name(i); break; } } if (displayValue == String.Empty) { return(codedValue); } else { return(displayValue); } }
/// <summary> /// Used when the CodedValueDomain field is of Date type /// This function is used to construct a query string which when executed on the source Feature Class/Table will return the records that violate domain constraints. /// </summary> /// <param name="ipCodedDomain">Coded value domain applied to the Date type field whose attributes are getting validated</param> /// <param name="strFieldName">Name of the Date type field</param> /// <returns></returns> private string GetDateQueryStringForCodedDomain(ICodedValueDomain ipCodedDomain, string strFieldName) { if (null == ipCodedDomain || string.IsNullOrEmpty(strFieldName)) { return(""); } if (null == m_ipWorkspace) { return(""); } string strQueryString = ""; DatabaseType eDBType = GetDatabaseType(m_ipWorkspace); if (eDBType == DatabaseType.FGDB || eDBType == DatabaseType.SHAPEFILE) { if (ipCodedDomain.CodeCount > 0) { strQueryString = strFieldName + " NOT IN ("; for (int i = 0; i < ipCodedDomain.CodeCount; i++) { if (i == 0) { strQueryString += "date '" + Convert.ToString(ipCodedDomain.get_Value(i)) + "'"; } else { strQueryString += ", date '" + Convert.ToString(ipCodedDomain.get_Value(i)) + "'"; } } strQueryString += ")"; } } else if (eDBType == DatabaseType.MDB) { if (ipCodedDomain.CodeCount > 0) { strQueryString = strFieldName + " NOT IN ("; for (int i = 0; i < ipCodedDomain.CodeCount; i++) { if (i == 0) { strQueryString += "#" + Convert.ToString(ipCodedDomain.get_Value(i)) + "#"; } else { strQueryString += ", #" + Convert.ToString(ipCodedDomain.get_Value(i)) + "#"; } } strQueryString += ")"; } } else if (eDBType == DatabaseType.ORACLE) { if (ipCodedDomain.CodeCount > 0) { strQueryString = strFieldName + " NOT IN ("; for (int i = 0; i < ipCodedDomain.CodeCount; i++) { DateTime dateTimeValue = Convert.ToDateTime(ipCodedDomain.get_Value(i)); string strYear = dateTimeValue.Year.ToString(); string strMonth = dateTimeValue.Month.ToString(); if (dateTimeValue.Month < 10) { strMonth = "0" + strMonth; } string strDay = dateTimeValue.Day.ToString(); if (dateTimeValue.Day < 10) { strDay = "0" + strDay; } string strHour = dateTimeValue.Hour.ToString(); if (dateTimeValue.Hour < 10) { strHour = "0" + strHour; } string strMin = dateTimeValue.Minute.ToString(); if (dateTimeValue.Minute < 10) { strMin = "0" + strMin; } string strSec = dateTimeValue.Second.ToString(); if (dateTimeValue.Second < 10) { strSec = "0" + strSec; } string strFormattedDate = string.Format("to_date('{0}-{1}-{2} {3}:{4}:{5}', 'dd-mm-yyyy hh24:mi:ss')", strDay, strMonth, strYear, strHour, strMin, strSec); if (i == 0) { strQueryString += strFormattedDate; } else { strQueryString += "," + strFormattedDate; } } strQueryString += ")"; } } else if (eDBType == DatabaseType.POSTGRESQL || eDBType == DatabaseType.SQLSERVER) { if (ipCodedDomain.CodeCount > 0) { strQueryString = strFieldName + " NOT IN ("; for (int i = 0; i < ipCodedDomain.CodeCount; i++) { if (i == 0) { strQueryString += "'" + Convert.ToString(ipCodedDomain.get_Value(i)) + "'"; } else { strQueryString += ", '" + Convert.ToString(ipCodedDomain.get_Value(i)) + "'"; } } strQueryString += ")"; } } else { strQueryString = ""; } return(strQueryString); }
/// <summary> /// Used for CodedValueDomain /// This function is used to construct a query string which when executed on the source Feature Class/Table will return the records that violate domain constraints. /// </summary> /// <param name="ipCodedDomain">Coded value domain applied to the field whose attributes are getting validated</param> /// <param name="strFieldName">Name of the field</param> /// <returns></returns> private string GetQueryStringForCodedDomain(ICodedValueDomain ipCodedDomain, string strFieldName) { if (null == ipCodedDomain || string.IsNullOrEmpty(strFieldName)) { return(""); } string strQueryString = ""; IDomain ipDomain = ipCodedDomain as IDomain; if (ipDomain.FieldType == esriFieldType.esriFieldTypeDate) { strQueryString = GetDateQueryStringForCodedDomain(ipCodedDomain, strFieldName); } else if (ipDomain.FieldType == esriFieldType.esriFieldTypeDouble || ipDomain.FieldType == esriFieldType.esriFieldTypeInteger || ipDomain.FieldType == esriFieldType.esriFieldTypeSingle || ipDomain.FieldType == esriFieldType.esriFieldTypeSmallInteger ) { if (ipCodedDomain.CodeCount > 0) { strQueryString = ""; strQueryString = strFieldName + " NOT IN ("; for (int i = 0; i < ipCodedDomain.CodeCount; i++) { if (i == 0) { strQueryString += Convert.ToString(ipCodedDomain.get_Value(i)); } else { strQueryString += "," + Convert.ToString(ipCodedDomain.get_Value(i)); } } strQueryString += ")"; } } else if (ipDomain.FieldType == esriFieldType.esriFieldTypeString) { if (ipCodedDomain.CodeCount > 0) { strQueryString = ""; strQueryString = strFieldName + " NOT IN ("; for (int i = 0; i < ipCodedDomain.CodeCount; i++) { if (i == 0) { strQueryString += "'" + Convert.ToString(ipCodedDomain.get_Value(i)) + "'"; } else { strQueryString += ",'" + Convert.ToString(ipCodedDomain.get_Value(i)) + "'"; } } strQueryString += ")"; } } return(strQueryString); }
private bool ExportTable(Excel.Workbook ExcelWbk, IMxDocument MxDoc, IStandaloneTable StandTable, ref IProgressDialog2 progressDialog, ref IStepProgressor stepProgressor, ref ITrackCancel trackCancel) { ITableProperties TableProperties = null; IEnumTableProperties EnumTableProperties = null; ITableProperty3 TableProperty = null; ITableCharacteristics TableCharacteristics = null; ITableSelection TabSel = null; IDisplayTable DisplayTable = null; ITable Table = null; IRow TabRow = null; IObjectClass ObjectClass = null; ISubtypes Subtypes = null; ITableFields TableFields = null; ICursor Cursor = null; IField CurField = null; IDomain Domain = null; ICodedValueDomain CodedValueDomain = null; object missing = null; object sheet = null; Microsoft.Office.Interop.Excel.Style style = null; try { bool UseDescriptions; int subtype; string SheetName; int Col = 0; int Row = 0; int i; int j; missing = System.Reflection.Missing.Value; sheet = ExcelWbk.Sheets[ExcelWbk.Sheets.Count]; Excel.Worksheet ExcelSheet; Excel.Range ExcelRange; //Add new Excel worksheet ExcelSheet = (Excel.Worksheet)ExcelWbk.Sheets.Add(missing, sheet, missing, missing); //style = ExcelWbk.Styles.Add("Style1"); //style.NumberFormat = "@"; //style.Font.Name = "Arial"; //style.Font.Bold = True //style.Font.Size = 12; //style.Interior.Pattern = Microsoft.Office.Interop.Excel.XlPattern.xlPattern Solid //style.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlighLe ft SheetName = StandTable.Name; if (SheetName.Length > 30) { SheetName = SheetName.Substring(0, 30); } ExcelSheet.Name = SheetName; //Determine whether to use descriptions or codes for domains UseDescriptions = true; TableProperties = MxDoc.TableProperties; EnumTableProperties = (IEnumTableProperties)TableProperties; EnumTableProperties.Reset(); TableProperty = (ITableProperty3)EnumTableProperties.Next(); while (TableProperty != null) { if (TableProperty.StandaloneTable != null) { if (TableProperty.StandaloneTable.Equals(StandTable)) { TableCharacteristics = (ITableCharacteristics)TableProperty; UseDescriptions = TableCharacteristics.ShowCodedValueDomainDescriptions; break; } } TableProperty = (ITableProperty3)EnumTableProperties.Next(); } TabSel = (ITableSelection)StandTable; DisplayTable = (IDisplayTable)StandTable; Table = (ITable)DisplayTable.DisplayTable; //Get subtype info ObjectClass = Table as IObjectClass; Subtypes = ObjectClass as ISubtypes; //Get TableFields so later we can determine whether that field is visible TableFields = (ITableFields)StandTable; //loop through each field and write column headings Row = 1; for (j = 0; j < TableFields.FieldCount; j++) { CurField = TableFields.get_Field(j); //skip blob and geometry fields if ((CurField.Type != esriFieldType.esriFieldTypeBlob) && (CurField.Type != esriFieldType.esriFieldTypeGeometry)) { Col += 1; //Write field alias name as Excel column header ExcelSheet.Cells[Row, Col] = TableFields.get_FieldInfo(j).Alias; if (CurField.Type == esriFieldType.esriFieldTypeString) { ExcelSheet.get_Range(ExcelSheet.Cells[1, Col], ExcelSheet.Cells[65535, Col]).EntireColumn.NumberFormat = "@"; } } } //Get all selected records for this table (use IDisplayTable to get any joined data) DisplayTable.DisplaySelectionSet.Search(null, true, out Cursor); //subtype = Subtypes.DefaultSubtypeCode; //For each selected record TabRow = Cursor.NextRow(); //stepProgressor.Step(); // progressDialog.Description = A4LGSharedFunctions.Localizer.GetString("ExportAsset") + stepProgressor.Position + A4LGSharedFunctions.Localizer.GetString("Of") + MxDoc.FocusMap.SelectionCount.ToString() + "."; while (TabRow != null) { Row += 1; if (Subtypes != null && Subtypes.HasSubtype == true && (TabRow.get_Value(Subtypes.SubtypeFieldIndex) != null)) { subtype = Convert.ToInt32(TabRow.get_Value(Subtypes.SubtypeFieldIndex)); } else { subtype = -99999; } //For each column Col = 0; for (j = 0; j < TableFields.FieldCount; j++) { CurField = TableFields.get_Field(j); //skip blob and geometry fields in data also if ((CurField.Type != esriFieldType.esriFieldTypeBlob) && (CurField.Type != esriFieldType.esriFieldTypeGeometry)) { Col += 1; ExcelSheet.Cells[Row, Col] = TabRow.get_Value(j); if (UseDescriptions == true && subtype == -99999) { Domain = CurField.Domain; if (Domain != null) { if (Domain.Type == esriDomainType.esriDTCodedValue) { CodedValueDomain = (ICodedValueDomain)CurField.Domain; for (i = 0; i < CodedValueDomain.CodeCount; i++) { if ((CodedValueDomain.get_Value(i)).ToString() == (TabRow.get_Value(j)).ToString()) { //System.Diagnostics.Debug.Print(CodedValueDomain.get_Name(0).ToString()); ExcelSheet.Cells[Row, Col] = CodedValueDomain.get_Name(i); i = CodedValueDomain.CodeCount; } } } } } else if (UseDescriptions == true && subtype != -99999) { if (Subtypes.SubtypeFieldIndex == j) { ExcelSheet.Cells[Row, Col] = Subtypes.get_SubtypeName(subtype); } else { Domain = Subtypes.get_Domain(subtype, CurField.Name); if ((Domain != null) && (Domain.Type == esriDomainType.esriDTCodedValue)) { CodedValueDomain = (ICodedValueDomain)Domain; for (i = 0; i < CodedValueDomain.CodeCount; i++) { if ((CodedValueDomain.get_Value(i)).ToString() == (TabRow.get_Value(j)).ToString()) { //System.Diagnostics.Debug.Print(CodedValueDomain.get_Name(0).ToString()); ExcelSheet.Cells[Row, Col] = CodedValueDomain.get_Name(i); i = CodedValueDomain.CodeCount; } } } } } } } stepProgressor.Step(); progressDialog.Description = A4LGSharedFunctions.Localizer.GetString("ExportAsset") + stepProgressor.Position + A4LGSharedFunctions.Localizer.GetString("Of") + MxDoc.FocusMap.SelectionCount.ToString() + "."; if (!trackCancel.Continue()) { return(false); } TabRow = Cursor.NextRow(); } //Hide Columns Col = 0; for (j = 0; j < TableFields.FieldCount; j++) { CurField = TableFields.get_Field(j); //skip blob and geometry fields in data also if ((CurField.Type != esriFieldType.esriFieldTypeBlob) && (CurField.Type != esriFieldType.esriFieldTypeGeometry)) { Col += 1; //Autofit ExcelRange = ExcelSheet.get_Range(ExcelSheet.Cells[1, Col], ExcelSheet.Cells[Row, Col]); ExcelRange.EntireColumn.AutoFit(); //Hide column if invisible in ArcMap if (TableFields.get_FieldInfo(j).Visible == false) { ExcelRange = ExcelSheet.get_Range(ExcelSheet.Cells[1, Col], ExcelSheet.Cells[Row, Col]); ExcelRange.EntireColumn.Hidden = true; } } } return(true); } catch { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("ExportXLError")); return(true); } finally { TableProperties = null; EnumTableProperties = null; TableProperty = null; TableCharacteristics = null; TabSel = null; DisplayTable = null; Table = null; TabRow = null; ObjectClass = null; Subtypes = null; TableFields = null; if (Cursor != null) { Marshal.ReleaseComObject(Cursor); } Cursor = null; CurField = null; Domain = null; CodedValueDomain = null; missing = null; sheet = null; style = null; } }
private bool ExportLayer(Excel.Workbook ExcelWbk, IMxDocument MxDoc, IFeatureLayer FLayer, ref IProgressDialog2 progressDialog, ref IStepProgressor stepProgressor, ref ITrackCancel trackCancel) { IFeatureClass FC = null; ISubtypes Subtypes = null; ITableProperties TableProperties = null; IEnumTableProperties EnumTableProperties = null; ITableProperty3 TableProperty = null; ITableCharacteristics TableCharacteristics = null; IFeatureSelection FeatSel = null; IDisplayTable DisplayTable = null; ITable Table = null; ILayerFields LayerFields = null; ITableFields TableFields = null; ILayer LayerTest = null; ICursor Cursor = null; IFeatureCursor FCursor = null; IField CurField = null; IDomain Domain = null; ICodedValueDomain CodedValueDomain = null; IFeature Feat = null; List <IPoint> pGeo = null; object missing = null; object sheet = null; Excel.Worksheet ExcelSheet = null; Excel.Range ExcelRange = null; Microsoft.Office.Interop.Excel.Style style = null; try { int Col = 0; int Row = 0; int i; int j; bool UseDescriptions; int subtype; string SheetName; missing = System.Reflection.Missing.Value; sheet = ExcelWbk.Sheets[ExcelWbk.Sheets.Count]; //Add new Excel worksheet ExcelSheet = (Excel.Worksheet)ExcelWbk.Sheets.Add(missing, sheet, missing, missing); SheetName = FLayer.Name; if (SheetName.Length > 30) { SheetName = SheetName.Substring(0, 30); } ExcelSheet.Name = SheetName; //style = ExcelWbk.Styles.Add("Style1"); //style.NumberFormat = "@"; LayerTest = (ILayer)FLayer; //Get Subtype info FC = FLayer.FeatureClass; Subtypes = FC as ISubtypes; //Determine whether to use descriptions or codes for domains and subtypes UseDescriptions = true; TableProperties = MxDoc.TableProperties; EnumTableProperties = (IEnumTableProperties)TableProperties; EnumTableProperties.Reset(); TableProperty = (ITableProperty3)EnumTableProperties.Next(); while (TableProperty != null && TableProperty.Layer != null) //Fixed { if (TableProperty.Layer.Equals(LayerTest)) { TableCharacteristics = (ITableCharacteristics)TableProperty; UseDescriptions = TableCharacteristics.ShowCodedValueDomainDescriptions; } TableProperty = (ITableProperty3)EnumTableProperties.Next(); } FeatSel = (IFeatureSelection)FLayer; DisplayTable = (IDisplayTable)FLayer; Table = (ITable)DisplayTable.DisplayTable; //Get TableFields so later we can determine whether that field is visible LayerFields = (ILayerFields)FLayer; TableFields = (ITableFields)FLayer; //loop through each field and write column headings Row = 1; for (j = 0; j < TableFields.FieldCount; j++) { CurField = TableFields.get_Field(j); //skip blob and geometry fields if ((CurField.Type != esriFieldType.esriFieldTypeBlob) && (CurField.Type != esriFieldType.esriFieldTypeGeometry)) { Col += 1; //Write field alias name as Excel column header ExcelSheet.Cells[Row, Col] = TableFields.get_FieldInfo(j).Alias; if (CurField.Type == esriFieldType.esriFieldTypeString) { ExcelSheet.get_Range(ExcelSheet.Cells[1, Col], ExcelSheet.Cells[65535, Col]).EntireColumn.NumberFormat = "@"; } } } Col += 1; ExcelSheet.Cells[Row, Col] = "X_COORD"; Col += 1; ExcelSheet.Cells[Row, Col] = "Y_COORD"; Col += 1; ExcelSheet.Cells[Row, Col] = "Lat"; Col += 1; ExcelSheet.Cells[Row, Col] = "Long"; IField pFieldTest = FLayer.FeatureClass.Fields.get_Field(FLayer.FeatureClass.Fields.FindField(FLayer.FeatureClass.ShapeFieldName)); IGeometryDef pGeometryDefTest = null; pGeometryDefTest = pFieldTest.GeometryDef; bool bZAware = false; bool bMAware = false; //Determine if M or Z aware if (pGeometryDefTest.GeometryType == esriGeometryType.esriGeometryPoint) { bZAware = pGeometryDefTest.HasZ; bMAware = pGeometryDefTest.HasM; } if (bZAware) { Col += 1; ExcelSheet.Cells[Row, Col] = "Z_COORD"; } pFieldTest = null; pGeometryDefTest = null; //Get all selected records for this table (use IDisplayTable to get any joined data) DisplayTable.DisplaySelectionSet.Search(null, true, out Cursor); FCursor = (IFeatureCursor)Cursor; //subtype = Subtypes.DefaultSubtypeCode; //For each selected record Feat = FCursor.NextFeature(); // stepProgressor.Step(); // progressDialog.Description = A4LGSharedFunctions.Localizer.GetString("ExportAsset") + stepProgressor.Position + A4LGSharedFunctions.Localizer.GetString("Of") + MxDoc.FocusMap.SelectionCount.ToString() + "."; while (Feat != null) { Row += 1; if (Subtypes != null && Subtypes.HasSubtype == true && (Feat.get_Value(Subtypes.SubtypeFieldIndex) != null)) { subtype = Convert.ToInt32(Feat.get_Value(Subtypes.SubtypeFieldIndex)); } else { subtype = -99999; } //For each column Col = 0; for (j = 0; j < TableFields.FieldCount; j++) { CurField = TableFields.get_Field(j); //skip blob and geometry fields in data also if ((CurField.Type != esriFieldType.esriFieldTypeBlob) && (CurField.Type != esriFieldType.esriFieldTypeGeometry)) { Col += 1; ExcelSheet.Cells[Row, Col] = Feat.get_Value(j); if (UseDescriptions == true && subtype == -99999) { Domain = CurField.Domain; if (Domain != null) { if (Domain.Type == esriDomainType.esriDTCodedValue) { CodedValueDomain = (ICodedValueDomain)CurField.Domain; for (i = 0; i < CodedValueDomain.CodeCount; i++) { if ((CodedValueDomain.get_Value(i)).ToString() == (Feat.get_Value(j)).ToString()) { //System.Diagnostics.Debug.Print(CodedValueDomain.get_Name(0).ToString()); ExcelSheet.Cells[Row, Col] = CodedValueDomain.get_Name(i); i = CodedValueDomain.CodeCount; } } } } } else if (UseDescriptions == true && subtype != -99999) { if (Subtypes.SubtypeFieldIndex == j) { ExcelSheet.Cells[Row, Col] = Subtypes.get_SubtypeName(subtype); } else { Domain = Subtypes.get_Domain(subtype, CurField.Name); if ((Domain != null) && (Domain.Type == esriDomainType.esriDTCodedValue)) { CodedValueDomain = (ICodedValueDomain)Domain; for (i = 0; i < CodedValueDomain.CodeCount; i++) { if ((CodedValueDomain.get_Value(i)).ToString() == (Feat.get_Value(j)).ToString()) { //System.Diagnostics.Debug.Print(CodedValueDomain.get_Name(0).ToString()); ExcelSheet.Cells[Row, Col] = CodedValueDomain.get_Name(i); i = CodedValueDomain.CodeCount; } } } } } } } if (Feat.Shape != null) { if (Feat.Shape.IsEmpty == false) { pGeo = Globals.GetGeomCenter(Feat.Shape); if (pGeo != null) { if (pGeo.Count > 0) { if (pGeo[0].X != null) { ExcelSheet.Cells[Row, Col + 1] = pGeo[0].X; } if (pGeo[0].Y != null) { ExcelSheet.Cells[Row, Col + 2] = pGeo[0].Y; } if (pGeo[0] != null) { pGeo[0].Project(srWGS84); ExcelSheet.Cells[Row, Col + 3] = pGeo[0].Y; ExcelSheet.Cells[Row, Col + 4] = pGeo[0].X; } if (bZAware) { ExcelSheet.Cells[Row, Col + 5] = pGeo[0].Z; } } } } } stepProgressor.Step(); progressDialog.Description = A4LGSharedFunctions.Localizer.GetString("ExportAsset") + stepProgressor.Position + A4LGSharedFunctions.Localizer.GetString("Of") + MxDoc.FocusMap.SelectionCount.ToString() + "."; if (!trackCancel.Continue()) { return(false); } Feat = FCursor.NextFeature(); } //Hide Columns Col = 0; for (j = 0; j < TableFields.FieldCount; j++) { CurField = TableFields.get_Field(j); //skip blob and geometry fields in data also if ((CurField.Type != esriFieldType.esriFieldTypeBlob) && (CurField.Type != esriFieldType.esriFieldTypeGeometry)) { Col += 1; //Autofit ExcelRange = ExcelSheet.get_Range(ExcelSheet.Cells[1, Col], ExcelSheet.Cells[Row, Col]); ExcelRange.EntireColumn.AutoFit(); //Hide column if invisible in ArcMap if (TableFields.get_FieldInfo(j).Visible == false) { ExcelRange = ExcelSheet.get_Range(ExcelSheet.Cells[1, Col], ExcelSheet.Cells[Row, Col]); ExcelRange.EntireColumn.Hidden = true; } } } return(true); } catch { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("ExportXLError")); return(true); } finally { FC = null; Subtypes = null; TableProperties = null; if (EnumTableProperties != null) { Marshal.ReleaseComObject(EnumTableProperties); } EnumTableProperties = null; TableProperty = null; TableCharacteristics = null; FeatSel = null; DisplayTable = null; Table = null; LayerFields = null; TableFields = null; LayerTest = null; if (Cursor != null) { Marshal.ReleaseComObject(Cursor); } Cursor = null; if (FCursor != null) { Marshal.ReleaseComObject(FCursor); } FCursor = null; CurField = null; Domain = null; CodedValueDomain = null; Feat = null; pGeo = null; missing = null; sheet = null; ExcelSheet = null; ExcelRange = null; style = null; } }
public DataTable GetDataTableByDistrictName() { try { FacilityClass fac = FacilityClassManager.Instance.GetFacilityClassByName(_sysFieldName); if (fac == null) { return(null); } List <FieldInfo> listFI = fac.FieldInfoCollection; _dt = new DataTable(); foreach (FieldInfo fi in listFI) { if (fi.CanStats) { DataColumn dc = new DataColumn(fi.Alias); if (ColumnExist(_dt, fi.Alias)) { continue; } _dt.Columns.Add(dc); } } if (_dict != null && _dict.ContainsKey(_disName)) { List <IFeature> listF = _dict[_disName]; foreach (IFeature fea in listF) { DataRow dr = _dt.NewRow(); foreach (FieldInfo fi in listFI) { if (fi.CanStats) { int index = fea.Fields.FindField(fi.Name); if (index == -1) { continue; } IDomain pDomain = fea.Fields.get_Field(index).Domain; if (pDomain != null && pDomain.Type == esriDomainType.esriDTCodedValue) { ICodedValueDomain pCD = pDomain as ICodedValueDomain; for (int i = 0; i < pCD.CodeCount; i++) { if (object.Equals(pCD.get_Value(i), fea.get_Value(index))) { dr[fi.Alias] = pCD.get_Name(i); } } } else if (fi.DataType == "Decimal") { dr[fi.Alias] = Math.Round(Convert.ToDouble(fea.get_Value(index)), 2).ToString(); } else { dr[fi.Alias] = fea.get_Value(index).ToString(); } } } _dt.Rows.Add(dr); } } return(_dt); } catch (System.Exception ex) { return(null); } }
/// <summary> /// Used for CodedValueDomain /// This function is used to construct a query string which when executed on the source Feature Class/Table will return the records that violate domain constraints. /// </summary> /// <param name="ipCodedDomain">Coded value domain applied to the field whose attributes are getting validated</param> /// <param name="strFieldName">Name of the field</param> /// <returns></returns> private string GetQueryStringForCodedDomain(ICodedValueDomain ipCodedDomain, string strFieldName) { if (null == ipCodedDomain || string.IsNullOrEmpty(strFieldName)) return ""; string strQueryString = ""; IDomain ipDomain = ipCodedDomain as IDomain; if (ipDomain.FieldType == esriFieldType.esriFieldTypeDate) { strQueryString = GetDateQueryStringForCodedDomain(ipCodedDomain, strFieldName); } else if (ipDomain.FieldType == esriFieldType.esriFieldTypeDouble || ipDomain.FieldType == esriFieldType.esriFieldTypeInteger || ipDomain.FieldType == esriFieldType.esriFieldTypeSingle || ipDomain.FieldType == esriFieldType.esriFieldTypeSmallInteger ) { if(ipCodedDomain.CodeCount > 0) { strQueryString = ""; strQueryString = strFieldName + " NOT IN ("; for (int i = 0; i < ipCodedDomain.CodeCount; i++) { if(i==0) strQueryString += Convert.ToString(ipCodedDomain.get_Value(i)); else strQueryString += "," + Convert.ToString(ipCodedDomain.get_Value(i)); } strQueryString += ")"; } } else if (ipDomain.FieldType == esriFieldType.esriFieldTypeString) { if (ipCodedDomain.CodeCount > 0) { strQueryString = ""; strQueryString = strFieldName + " NOT IN ("; for (int i = 0; i < ipCodedDomain.CodeCount; i++) { if (i == 0) strQueryString += "'" + Convert.ToString(ipCodedDomain.get_Value(i)) + "'"; else strQueryString += ",'" + Convert.ToString(ipCodedDomain.get_Value(i)) + "'"; } strQueryString += ")"; } } return strQueryString; }
private void gridView1_CellValueChanged(object sender, CellValueChangedEventArgs e) { if (this.m_CanDo) { if (this.m_pFeatLayer == null) { LayerObject selectedItem = this.cboLayer.SelectedItem as LayerObject; IFeatureLayer layer = selectedItem.Layer as IFeatureLayer; this.m_pFeatLayer = layer; } if (this.m_pFeatLayer != null) { object obj3; ISubtypes featureClass = this.m_pFeatLayer.FeatureClass as ISubtypes; GridEditorItem row = this.gridView1.GetRow(e.RowHandle) as GridEditorItem; int index = this.m_pFeatLayer.FeatureClass.Fields.FindFieldByAliasName(row.Name); IField pField = this.m_pFeatLayer.FeatureClass.Fields.get_Field(index); if ((featureClass != null) && featureClass.HasSubtype) { if (featureClass.SubtypeFieldName == pField.Name) { IEnumSubtype subtypes = featureClass.Subtypes; subtypes.Reset(); int subtypeCode = 0; for (string str = subtypes.Next(out subtypeCode); str != null; str = subtypes.Next(out subtypeCode)) { if (e.Value.ToString() == str) { this.UpdateFieldValue(pField, subtypeCode); break; } } } else if (e.Value.ToString() == "<空>") { obj3 = DBNull.Value; this.UpdateFieldValue(pField, obj3); } else { this.UpdateFieldValue(pField, e.Value); } } else if (e.Value.ToString() == "<空>") { obj3 = DBNull.Value; this.UpdateFieldValue(pField, obj3); } else { int num3; string name = (this.m_pFeatLayer.FeatureClass as IDataset).Name; NameValueCollection codeDomain = CodeDomainManage.GetCodeDomain(pField.Name, name); if (codeDomain.Count > 0) { for (num3 = 0; num3 < codeDomain.Count; num3++) { string str3 = codeDomain.Keys[num3]; if (str3 == e.Value.ToString()) { this.UpdateFieldValue(pField, codeDomain[str3]); break; } } } else { IDomain domain = pField.Domain; if (domain is ICodedValueDomain) { ICodedValueDomain domain2 = domain as ICodedValueDomain; for (num3 = 0; num3 < domain2.CodeCount; num3++) { if (domain2.get_Name(num3) == e.Value.ToString()) { this.UpdateFieldValue(pField, domain2.get_Value(num3)); break; } } } else if (this.UpdateFieldValue(pField, e.Value)) { this.m_CanDo = false; this.m_CanDo = true; } } } } } }
static void Main(string[] args) { // s = ArcZona.AZUtil.ParseGeoDBName(@"sde:sqlserver:DPU-PBU-GIS77\sqlexpress"); // s = ArcZona.AZUtil.ParseGeoDBName("sde:oracle10g:/:dpu_admin"); // s = ArcZona.AZUtil.ParseGeoDBName("5151:dpu_admin"); /* Sample Command Line Params: * -n ssDomainOwner -v -g "\OWNEDBY_Example.gdb" * * */ try { ESRILicenseProductCode = esriLicenseProductCode.esriLicenseProductCodeArcView; ArgParser = new CommandLine.Utility.CommandArguments(System.Environment.GetCommandLineArgs()); // display the usage when if (System.Environment.CommandLine.IndexOf("-h", 0, System.StringComparison.CurrentCultureIgnoreCase) >= 0 | System.Environment.CommandLine.IndexOf("--help", 0, System.StringComparison.CurrentCultureIgnoreCase) >= 0 | System.Environment.CommandLine.IndexOf("/?", 0, System.StringComparison.CurrentCultureIgnoreCase) >= 0 | System.Environment.CommandLine.IndexOf("-help", 0, System.StringComparison.CurrentCultureIgnoreCase) >= 0) { Usage(); return; } if (ValidateArgs() == true) { ESRILicenseInitializer = new GeoprocessingInDotNet.LicenseInitializer(); ConsoleWriteLine("Arguments Validated!!"); ConsoleWriteLine("Initializing ArcObjects License..."); ESRILicenseInitializer.InitializeApplication(ESRILicenseProductCode); if (ESRILicenseInitializer.InitializedProduct > 0) { ConsoleWriteLine("License Initialized."); IWorkspace ws = UmbrielArcGISHelper.GetWorkspace(ArgParser); IWorkspaceDomains2 workspaceDomains = (IWorkspaceDomains2)ws; IDomain domain = workspaceDomains.get_DomainByName(DomainName); ICodedValueDomain codedDomain = (ICodedValueDomain)domain; Stack <string> domainValues = new Stack <string>(); for (int i = codedDomain.CodeCount - 1; i >= 0; i--) { codedDomain.DeleteCode(codedDomain.get_Value(i)); } workspaceDomains.AlterDomain(domain); } else { Console.WriteLine("\a"); Console.WriteLine("Could not initialize ESRI License."); } // Do not make any call to ArcObjects after ShutDownApplication() ConsoleWriteLine("Releasing ArcObjects License..."); ESRILicenseInitializer.ShutdownApplication(); ConsoleWriteLine("ArcObjects License Released."); } else { Usage(); return; } } catch (Exception ex) { // beep! Console.WriteLine("\a"); Console.WriteLine("An error has occurred: \n\n"); Console.WriteLine(ex.StackTrace); } finally { // try to shut down the ESRI license if (ESRILicenseInitializer != null) { if (ESRILicenseInitializer.InitializedProduct > 0) { ESRILicenseInitializer.ShutdownApplication(); } } } /* SDEMeta sleeps for 2000 milliseconds by default, * so that when called from a batch, the license manager has a chance to return * the license to the pool before the next SDEMeta attempts to check it out. */ if (!ArgParser.Contains("-nosleep")) { string sleep = ArgParser.GetValue("sleep"); try { int sleepDuration = 2000; if (!String.IsNullOrEmpty(sleep)) { sleepDuration = Convert.ToInt32(sleep); } System.Threading.Thread.Sleep(sleepDuration); } catch { } } }
private string method_7(IRow irow_0, IField ifield_0, int int_0) { int num; string str = irow_0.get_Value(int_0).ToString(); ISubtypes table = irow_0.Table as ISubtypes; ICodedValueDomain domain = null; IList list = new ArrayList(); IDomain domain2 = null; if ((table != null) && table.HasSubtype) { if (table.SubtypeFieldName == ifield_0.Name) { try { str = table.get_SubtypeName((irow_0 as IRowSubtypes).SubtypeCode); } catch { } } else { domain2 = table.get_Domain((irow_0 as IRowSubtypes).SubtypeCode, ifield_0.Name); if (domain2 is ICodedValueDomain) { domain = domain2 as ICodedValueDomain; if (ifield_0.IsNullable) { list.Add("<空>"); } num = 0; while (num < domain.CodeCount) { if (str == domain.get_Value(num).ToString()) { str = domain.get_Name(num); break; } num++; } } } } domain2 = ifield_0.Domain; if (domain2 != null) { if (domain2 is ICodedValueDomain) { domain = domain2 as ICodedValueDomain; num = 0; while (num < domain.CodeCount) { if (str == domain.get_Value(num).ToString()) { return(domain.get_Name(num)); } num++; } } return(str); } string name = (irow_0.Table as IDataset).Name; CodeDomainEx codeDomainEx = CodeDomainManage.GetCodeDomainEx(ifield_0.Name, name); if (codeDomainEx == null) { return(str); } if ((codeDomainEx.ParentIDFieldName == null) || (codeDomainEx.ParentIDFieldName.Length == 0)) { NameValueCollection codeDomain = codeDomainEx.GetCodeDomain(); for (num = 0; num < codeDomain.Count; num++) { string str3 = codeDomain.Keys[num]; if (str == codeDomain[str3]) { str = str3; } } return(str); } return(codeDomainEx.FindName(str)); }
/// <summary> /// Used when the CodedValueDomain field is of Date type /// This function is used to construct a query string which when executed on the source Feature Class/Table will return the records that violate domain constraints. /// </summary> /// <param name="ipCodedDomain">Coded value domain applied to the Date type field whose attributes are getting validated</param> /// <param name="strFieldName">Name of the Date type field</param> /// <returns></returns> private string GetDateQueryStringForCodedDomain(ICodedValueDomain ipCodedDomain, string strFieldName) { if (null == ipCodedDomain || string.IsNullOrEmpty(strFieldName)) return ""; if (null == m_ipWorkspace) return ""; string strQueryString = ""; DatabaseType eDBType = GetDatabaseType(m_ipWorkspace); if (eDBType == DatabaseType.FGDB || eDBType == DatabaseType.SHAPEFILE) { if (ipCodedDomain.CodeCount > 0) { strQueryString = strFieldName + " NOT IN ("; for (int i = 0; i < ipCodedDomain.CodeCount; i++) { if (i == 0) strQueryString += "date '" + Convert.ToString(ipCodedDomain.get_Value(i)) + "'"; else strQueryString += ", date '" + Convert.ToString(ipCodedDomain.get_Value(i)) + "'"; } strQueryString += ")"; } } else if (eDBType == DatabaseType.MDB) { if (ipCodedDomain.CodeCount > 0) { strQueryString = strFieldName + " NOT IN ("; for (int i = 0; i < ipCodedDomain.CodeCount; i++) { if (i == 0) strQueryString += "#" + Convert.ToString(ipCodedDomain.get_Value(i)) + "#"; else strQueryString += ", #" + Convert.ToString(ipCodedDomain.get_Value(i)) + "#"; } strQueryString += ")"; } } else if (eDBType == DatabaseType.ORACLE) { if (ipCodedDomain.CodeCount > 0) { strQueryString = strFieldName + " NOT IN ("; for (int i = 0; i < ipCodedDomain.CodeCount; i++) { DateTime dateTimeValue = Convert.ToDateTime(ipCodedDomain.get_Value(i)); string strYear = dateTimeValue.Year.ToString(); string strMonth = dateTimeValue.Month.ToString(); if (dateTimeValue.Month < 10) strMonth = "0" + strMonth; string strDay = dateTimeValue.Day.ToString(); if (dateTimeValue.Day < 10) strDay = "0" + strDay; string strHour = dateTimeValue.Hour.ToString(); if (dateTimeValue.Hour < 10) strHour = "0" + strHour; string strMin = dateTimeValue.Minute.ToString(); if (dateTimeValue.Minute < 10) strMin = "0" + strMin; string strSec = dateTimeValue.Second.ToString(); if (dateTimeValue.Second < 10) strSec = "0" + strSec; string strFormattedDate = string.Format("to_date('{0}-{1}-{2} {3}:{4}:{5}', 'dd-mm-yyyy hh24:mi:ss')",strDay,strMonth,strYear,strHour,strMin,strSec); if (i == 0) strQueryString += strFormattedDate; else strQueryString += "," + strFormattedDate; } strQueryString += ")"; } } else if (eDBType == DatabaseType.POSTGRESQL || eDBType == DatabaseType.SQLSERVER) { if (ipCodedDomain.CodeCount > 0) { strQueryString = strFieldName + " NOT IN ("; for (int i = 0; i < ipCodedDomain.CodeCount; i++) { if (i == 0) strQueryString += "'" + Convert.ToString(ipCodedDomain.get_Value(i)) + "'"; else strQueryString += ", '" + Convert.ToString(ipCodedDomain.get_Value(i)) + "'"; } strQueryString += ")"; } } else { strQueryString = ""; } return strQueryString; }
private void Init() { this.gridControl1.Focus(); this.m_pVertXtraGrid.Clear(); int rowHandle = -1; if (this.m_pObject == null) { this.m_CanDo = true; } else { this.toolStripDropDownButton1.DropDownItemClicked += new ToolStripItemClickedEventHandler(this.toolStripDropDownButton1_DropDownItemClicked); try { ITableAttachments attachments = (ITableAttachments)this.m_pObject.Class; if (attachments != null) { if (attachments.HasAttachments) { this.toolStrip1.Visible = true; this.InitAttachment(); } else { this.toolStrip1.Visible = false; } } } catch { } IFields fields = this.m_pObject.Fields; string[] strArray = new string[2]; ISubtypes subtypes = this.m_pObject.Class as ISubtypes; IDomain domain = null; for (int i = 0; i < fields.FieldCount; i++) { IField pField = fields.get_Field(i); if (this.CheckFieldIsVisible(this.m_pFeatureLayer, pField)) { strArray[0] = pField.AliasName; if (pField.Type == esriFieldType.esriFieldTypeGeometry) { strArray[1] = this.GetShapeString(pField); this.m_pVertXtraGrid.AddTextEdit(strArray[0], strArray[1], true); } else if (pField.Type == esriFieldType.esriFieldTypeOID) { strArray[1] = this.m_pObject.OID.ToString(); this.m_pVertXtraGrid.AddTextEdit(strArray[0], strArray[1], true); } else if (pField.Type == esriFieldType.esriFieldTypeBlob) { strArray[1] = "<二进制数据>"; this.m_pVertXtraGrid.AddTextEdit(strArray[0], strArray[1], true); } else { int num4; double minValue; double maxValue; object obj2 = this.m_pObject.get_Value(i); ICodedValueDomain domain2 = null; IList list = new ArrayList(); if ((subtypes != null) && subtypes.HasSubtype) { if (subtypes.SubtypeFieldName == pField.Name) { int num3; try { strArray[1] = subtypes.get_SubtypeName((this.m_pObject as IRowSubtypes).SubtypeCode); } catch { strArray[1] = obj2.ToString(); } IEnumSubtype subtype = subtypes.Subtypes; subtype.Reset(); for (string str = subtype.Next(out num3); str != null; str = subtype.Next(out num3)) { list.Add(str); } this.m_pVertXtraGrid.AddComBoBox(strArray[0], strArray[1], list, !this.FieldCanEdit(pField)); } else { domain = subtypes.get_Domain((this.m_pObject as IRowSubtypes).SubtypeCode, pField.Name); if (domain is ICodedValueDomain) { domain2 = domain as ICodedValueDomain; if (pField.IsNullable) { list.Add("<空>"); } strArray[1] = obj2.ToString(); num4 = 0; while (num4 < domain2.CodeCount) { list.Add(domain2.get_Name(num4)); if (obj2.ToString() == domain2.get_Value(num4).ToString()) { strArray[1] = domain2.get_Name(num4); } num4++; } this.m_pVertXtraGrid.AddComBoBox(strArray[0], strArray[1], list, !this.FieldCanEdit(pField)); } else if ((((pField.Type == esriFieldType.esriFieldTypeSmallInteger) || (pField.Type == esriFieldType.esriFieldTypeSingle)) || (pField.Type == esriFieldType.esriFieldTypeDouble)) || (pField.Type == esriFieldType.esriFieldTypeInteger)) { minValue = 0.0; maxValue = 0.0; if (domain is IRangeDomain) { minValue = (double)(domain as IRangeDomain).MinValue; maxValue = (double)(domain as IRangeDomain).MaxValue; } if (pField.Editable) { this.m_pVertXtraGrid.AddSpinEdit(strArray[0], obj2, false, minValue, maxValue); } else { this.m_pVertXtraGrid.AddTextEdit(strArray[0], obj2, true); } } else if (pField.Type == esriFieldType.esriFieldTypeDate) { this.m_pVertXtraGrid.AddDateEdit(strArray[0], obj2, !this.FieldCanEdit(pField)); } else { strArray[1] = obj2.ToString(); this.m_pVertXtraGrid.AddTextEdit(strArray[0], strArray[1], !this.FieldCanEdit(pField)); } } } else { domain = pField.Domain; if (domain != null) { if (domain is ICodedValueDomain) { domain2 = domain as ICodedValueDomain; if (pField.IsNullable) { list.Add("<空>"); } strArray[1] = obj2.ToString(); num4 = 0; while (num4 < domain2.CodeCount) { list.Add(domain2.get_Name(num4)); if (obj2.ToString() == domain2.get_Value(num4).ToString()) { strArray[1] = domain2.get_Name(num4); } num4++; } this.m_pVertXtraGrid.AddComBoBox(strArray[0], strArray[1], list, !this.FieldCanEdit(pField)); } else if ((((pField.Type == esriFieldType.esriFieldTypeSmallInteger) || (pField.Type == esriFieldType.esriFieldTypeSingle)) || (pField.Type == esriFieldType.esriFieldTypeDouble)) || (pField.Type == esriFieldType.esriFieldTypeInteger)) { minValue = 0.0; maxValue = 0.0; if (domain is IRangeDomain) { minValue = (double)(domain as IRangeDomain).MinValue; maxValue = (double)(domain as IRangeDomain).MaxValue; } if (pField.Editable) { this.m_pVertXtraGrid.AddSpinEdit(strArray[0], obj2, false, minValue, maxValue); } else { this.m_pVertXtraGrid.AddTextEdit(strArray[0], obj2, true); } } else if (pField.Type == esriFieldType.esriFieldTypeDate) { this.m_pVertXtraGrid.AddDateEdit(strArray[0], obj2, !this.FieldCanEdit(pField)); } else { strArray[1] = obj2.ToString(); this.m_pVertXtraGrid.AddTextEdit(strArray[0], strArray[1], !this.FieldCanEdit(pField)); } } else { string name = (this.m_pObject.Class as IDataset).Name; CodeDomainEx codeDomainEx = CodeDomainManage.GetCodeDomainEx(pField.Name, name); if (codeDomainEx != null) { if ((codeDomainEx.ParentIDFieldName == null) || (codeDomainEx.ParentIDFieldName.Length == 0)) { NameValueCollection codeDomain = codeDomainEx.GetCodeDomain(); if (pField.IsNullable) { list.Add("<空>"); } strArray[1] = obj2.ToString(); for (num4 = 0; num4 < codeDomain.Count; num4++) { string str3 = codeDomain.Keys[num4]; list.Add(str3); if (obj2.ToString() == codeDomain[str3]) { strArray[1] = str3; } } this.m_pVertXtraGrid.AddComBoBox(strArray[0], strArray[1], list, !this.FieldCanEdit(pField)); } else { strArray[1] = obj2.ToString(); this.m_pVertXtraGrid.AddTreeviewComBoBox(strArray[0], codeDomainEx.FindName(strArray[1]), codeDomainEx, !this.FieldCanEdit(pField)); } } else { if ((((pField.Type == esriFieldType.esriFieldTypeSmallInteger) || (pField.Type == esriFieldType.esriFieldTypeSingle)) || (pField.Type == esriFieldType.esriFieldTypeDouble)) || (pField.Type == esriFieldType.esriFieldTypeInteger)) { if (pField.Editable) { this.m_pVertXtraGrid.AddSpinEdit(strArray[0], obj2, false, 0.0, 0.0); } else { this.m_pVertXtraGrid.AddTextEdit(strArray[0], obj2, true); } } else if (pField.Type == esriFieldType.esriFieldTypeDate) { this.m_pVertXtraGrid.AddDateEdit(strArray[0], obj2, !this.FieldCanEdit(pField)); } else { strArray[1] = obj2.ToString(); this.m_pVertXtraGrid.AddTextEdit(strArray[0], strArray[1], !this.FieldCanEdit(pField)); } if (strArray[0] == this.m_EditFeildName) { rowHandle = i; } } } } } } } if (rowHandle >= 0) { this.gridView1.SelectRow(rowHandle); } this.gridView1.Focus(); this.m_CanDo = true; base.Parent.Focus(); } }
private void cboLayer_SelectedIndexChanged(object sender, EventArgs e) { this.m_pVertXtraGrid.Clear(); if (this.cboLayer.SelectedIndex != -1) { LayerObject selectedItem = this.cboLayer.SelectedItem as LayerObject; IFeatureLayer pLayer = selectedItem.Layer as IFeatureLayer; this.m_pFeatLayer = pLayer; if (pLayer != null) { ICursor cursor; (pLayer as IFeatureSelection).SelectionSet.Search(null, false, out cursor); IList <IRow> pLists = new List <IRow>(); for (IRow row = cursor.NextRow(); row != null; row = cursor.NextRow()) { pLists.Add(row); } ComReleaser.ReleaseCOMObject(cursor); IFields fields = pLayer.FeatureClass.Fields; string[] strArray = new string[2]; ISubtypes featureClass = pLayer.FeatureClass as ISubtypes; IDomain domain = null; for (int i = 0; i < fields.FieldCount; i++) { IField pField = fields.get_Field(i); if (this.CheckFieldIsVisible(pLayer, pField)) { strArray[0] = pField.AliasName; if (pField.Type == esriFieldType.esriFieldTypeGeometry) { strArray[1] = this.GetShapeString(pField); this.m_pVertXtraGrid.AddTextEdit(strArray[0], strArray[1], true); } else if (pField.Type == esriFieldType.esriFieldTypeBlob) { strArray[1] = "<二进制数据>"; this.m_pVertXtraGrid.AddTextEdit(strArray[0], strArray[1], true); } else if ((pField.Type != esriFieldType.esriFieldTypeOID) && pField.Editable) { int num3; double minValue; double maxValue; ICodedValueDomain domain2 = null; IList list2 = new ArrayList(); if ((featureClass != null) && featureClass.HasSubtype) { if (featureClass.SubtypeFieldName == pField.Name) { int num2; if (this.CheckValueIsEqual(pLists, i)) { object obj4 = pLists[0].get_Value(i); if (obj4 is DBNull) { strArray[1] = "<空>"; } else { try { strArray[1] = featureClass.get_SubtypeName( (pLists[0] as IRowSubtypes).SubtypeCode); } catch { strArray[1] = obj4.ToString(); } } } else { strArray[1] = "<空>"; } IEnumSubtype subtypes = featureClass.Subtypes; subtypes.Reset(); for (string str = subtypes.Next(out num2); str != null; str = subtypes.Next(out num2)) { list2.Add(str); } this.m_pVertXtraGrid.AddComBoBox(strArray[0], strArray[1], list2, !pField.Editable); } else { domain = featureClass.get_Domain((pLists[0] as IRowSubtypes).SubtypeCode, pField.Name); if (domain is ICodedValueDomain) { domain2 = domain as ICodedValueDomain; if (pField.IsNullable) { list2.Add("<空>"); } if (this.CheckValueIsEqual(pLists, i)) { strArray[1] = pLists[0].get_Value(i).ToString(); } else { strArray[1] = "<空>"; } num3 = 0; while (num3 < domain2.CodeCount) { list2.Add(domain2.get_Name(num3)); if (strArray[1] == domain2.get_Value(num3).ToString()) { strArray[1] = domain2.get_Name(num3); } num3++; } this.m_pVertXtraGrid.AddComBoBox(strArray[0], strArray[1], list2, !pField.Editable); } else { if (this.CheckValueIsEqual(pLists, i)) { strArray[1] = pLists[0].get_Value(i).ToString(); } else { strArray[1] = "<空>"; } if ((((pField.Type == esriFieldType.esriFieldTypeSmallInteger) || (pField.Type == esriFieldType.esriFieldTypeSingle)) || (pField.Type == esriFieldType.esriFieldTypeDouble)) || (pField.Type == esriFieldType.esriFieldTypeInteger)) { minValue = 0.0; maxValue = 0.0; if (domain is IRangeDomain) { minValue = (double)(domain as IRangeDomain).MinValue; maxValue = (double)(domain as IRangeDomain).MaxValue; } if (pField.Editable) { this.m_pVertXtraGrid.AddSpinEdit(strArray[0], strArray[1], false, minValue, maxValue); } else { this.m_pVertXtraGrid.AddTextEdit(strArray[0], strArray[1], true); } } else if (pField.Type == esriFieldType.esriFieldTypeDate) { this.m_pVertXtraGrid.AddDateEdit(strArray[0], strArray[1], !pField.Editable); } else { if (this.CheckValueIsEqual(pLists, i)) { strArray[1] = pLists[0].get_Value(i).ToString(); } else { strArray[1] = "<空>"; } this.m_pVertXtraGrid.AddTextEdit(strArray[0], strArray[1], !pField.Editable); } } } } else { domain = pField.Domain; if (domain != null) { if (domain is ICodedValueDomain) { domain2 = domain as ICodedValueDomain; if (pField.IsNullable) { list2.Add("<空>"); } if (this.CheckValueIsEqual(pLists, i)) { strArray[1] = pLists[0].get_Value(i).ToString(); } else { strArray[1] = "<空>"; } num3 = 0; while (num3 < domain2.CodeCount) { list2.Add(domain2.get_Name(num3)); if (strArray[1] == domain2.get_Value(num3).ToString()) { strArray[1] = domain2.get_Name(num3); } num3++; } this.m_pVertXtraGrid.AddComBoBox(strArray[0], strArray[1], list2, !pField.Editable); } else { if (this.CheckValueIsEqual(pLists, i)) { strArray[1] = pLists[0].get_Value(i).ToString(); } else { strArray[1] = "<空>"; } if ((((pField.Type == esriFieldType.esriFieldTypeSmallInteger) || (pField.Type == esriFieldType.esriFieldTypeSingle)) || (pField.Type == esriFieldType.esriFieldTypeDouble)) || (pField.Type == esriFieldType.esriFieldTypeInteger)) { minValue = 0.0; maxValue = 0.0; if (domain is IRangeDomain) { minValue = (double)(domain as IRangeDomain).MinValue; maxValue = (double)(domain as IRangeDomain).MaxValue; } if (pField.Editable) { this.m_pVertXtraGrid.AddSpinEdit(strArray[0], strArray[1], false, minValue, maxValue); } else { this.m_pVertXtraGrid.AddTextEdit(strArray[0], strArray[1], true); } } else if (pField.Type == esriFieldType.esriFieldTypeDate) { this.m_pVertXtraGrid.AddDateEdit(strArray[0], strArray[1], !pField.Editable); } else { this.m_pVertXtraGrid.AddTextEdit(strArray[0], strArray[1], !pField.Editable); } } } else { if (this.CheckValueIsEqual(pLists, i)) { strArray[1] = pLists[0].get_Value(i).ToString(); } else { strArray[1] = "<空>"; } string name = (pLayer.FeatureClass as IDataset).Name; NameValueCollection codeDomain = CodeDomainManage.GetCodeDomain(pField.Name, name); if (codeDomain.Count > 0) { if (pField.IsNullable) { list2.Add("<空>"); } for (num3 = 0; num3 < codeDomain.Count; num3++) { string str3 = codeDomain.Keys[num3]; list2.Add(str3); if (strArray[1] == codeDomain[str3]) { strArray[1] = str3; } } this.m_pVertXtraGrid.AddComBoBox(strArray[0], strArray[1], list2, !pField.Editable); } else if ((((pField.Type == esriFieldType.esriFieldTypeSmallInteger) || (pField.Type == esriFieldType.esriFieldTypeSingle)) || (pField.Type == esriFieldType.esriFieldTypeDouble)) || (pField.Type == esriFieldType.esriFieldTypeInteger)) { if (pField.Editable) { this.m_pVertXtraGrid.AddSpinEdit(strArray[0], strArray[1], false, 0.0, 0.0); } else { this.m_pVertXtraGrid.AddTextEdit(strArray[0], strArray[1], true); } } else if (pField.Type == esriFieldType.esriFieldTypeDate) { this.m_pVertXtraGrid.AddDateEdit(strArray[0], strArray[1], !pField.Editable); } else { this.m_pVertXtraGrid.AddTextEdit(strArray[0], strArray[1], !pField.Editable); } } } } } } } } }