Sameer,What version of ArcGIS are you running this utility on? I had seen this a while ago but did not pursue it because I was under the impression that this utility was moved to Server.WebControls namespace and is unavailable for ArcGIS desktop solutions.Does this work for ArcGIS 10.x?
Hi,Above post converts the table data to .net datatable which seems to me is nice and easy way. but I believe we can avoid ICursors and looping through the IRow.There is a better way to do it, and this is how to do ituse ESRI.ArcGIS.Utility.Converter.ToDataSet.Sample code:ITable table = featureWorkspace.OpenTable(tableName); IRecordSetInit recordSetInit= new ESRI.ArcGIS.Geodatabase.RecordSetClass(); recordSetInit.SetSourceTable(table, new QueryFilterClass()); IRecordSet recordSet= recordSetInit as IRecordSet; System.Data.DataSet netDS = ESRI.ArcGIS.Utility.Converter.ToDataSet(recordSet);I believe this will reduce the efforts and time required for looping through cursors. after getting Datatable you can easily bind it with the Datagrid.Hope this helps! Regards,Sameer
ITable table = featureWorkspace.OpenTable(tableName); IRecordSetInit recordSetInit= new ESRI.ArcGIS.Geodatabase.RecordSetClass(); recordSetInit.SetSourceTable(table, new QueryFilterClass()); IRecordSet recordSet= recordSetInit as IRecordSet; System.Data.DataSet netDS = ESRI.ArcGIS.Utility.Converter.ToDataSet(recordSet);
Public Function ConvertToADONETDataTableFromLayer(ByVal inLayer As IFeatureLayer) As DataTable Try Dim tmpDT As New DataTable("tmpDT") Dim column As DataColumn Dim pTable As ITable = inLayer.FeatureClass Dim pFields As IFields = pTable.Fields Dim pCur As ICursor = pTable.Search(Nothing, False) For c = 0 To pCur.Fields.FieldCount - 1 column = New DataColumn() column.ColumnName = (pFields.Field(c).Name) If pFields.Field(c).Type = esriFieldType.esriFieldTypeString Then column.DataType = System.Type.GetType("System.String") ElseIf pFields.Field(c).Type = esriFieldType.esriFieldTypeInteger Then column.DataType = System.Type.GetType("System.Int32") ElseIf pFields.Field(c).Type = esriFieldType.esriFieldTypeDouble Then column.DataType = System.Type.GetType("System.Double") ElseIf pFields.Field(c).Type = esriFieldType.esriFieldTypeDate Then column.DataType = System.Type.GetType("System.DateTime") ElseIf pFields.Field(c).Type = esriFieldType.esriFieldTypeSingle Then column.DataType = System.Type.GetType("System.Single") ElseIf pFields.Field(c).Type = esriFieldType.esriFieldTypeBlob Then column.DataType = System.Type.GetType("System.Byte") End If column.ReadOnly = False tmpDT.Columns.Add(column) Next Dim pRow As IRow = pCur.NextRow Dim newRow As DataRow Do Until pRow Is Nothing newRow = tmpDT.NewRow() newRow.BeginEdit() For cols = 0 To pCur.Fields.FieldCount - 1 newRow(cols) = pRow.Value(pRow.Fields.FindField(pFields.Field(cols).Name)) Next newRow.EndEdit() tmpDT.Rows.Add(newRow) tmpDT.AcceptChanges() pRow = pCur.NextRow Loop Return tmpDT Catch ex As Exception MsgBox(ex.ToString) Return Nothing End Try End Function
Angemeldete Mitglieder können Beiträge verfassen, Updates folgen und mehr. Neu hier? Registriere ein kostenloses Konto.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.