使用DataGrid控件显示要素类的表
要素类既可以以图形形式显示,也可以以文本表的形式显示出现。本例是在VB.NET中使用DataGrid控件实现。
如何显示一个要素类的表结构,只取了一层做试验:
Public Sub table()
Dim pFeatLyr As IFeatureLayer
pFeatLyr = pMainMap.Layer(0)
Dim pFeatlyrFields As ILayerFields
pFeatlyrFields = pFeatLyr
Dim pFeatCls As IFeatureClass
pFeatCls = pFeatLyr.FeatureClass
Dim myDataSet As DataSet
myDataSet = New DataSet("MapData")
Dim pTable As New DataTable(pFeatLyr.Name)
Dim pTableCol As DataColumn
Dim n As Integer
For n = 0 To pFeatlyrFields.FieldCount - 1
pTableCol = New DataColumn(pFeatlyrFields.Field(n).Name)
pTable.Columns.Add(pTableCol)
pTableCol = Nothing
Next
Dim pFeatCursor As IFeatureCursor
pFeatCursor = pFeatCls.Search(Nothing, False)
Dim pFeat As IFeature
pFeat = pFeatCursor.NextFeature
Do While Not pFeat Is Nothing
Dim i As Integer
Dim pTableRow As DataRow
pTableRow = pTable.NewRow
For i = 0 To pFeatlyrFields.FieldCount - 1
If pFeatlyrFields.FindField(pFeatCls.ShapeFieldName) = i Then
pTableRow(i) = pFeatCls.ShapeType
Else
pTableRow(i) = pFeat.Value(i)
End If
Next
pTable.Rows.Add(pTableRow)
pFeat = pFeatCursor.NextFeature
Loop
myDataSet.Tables.Add(pTable)
DataGrid1.DataSource = myDataSet
DataGrid1.DataMember = pFeatLyr.Name
End Sub
这样一来,DataGrid1就可以显示数据了。
如何判断点击了哪一行:
Private Sub DataGrid1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseDown
Dim myGrid As DataGrid = CType(sender, DataGrid)
Dim myHitInfo As DataGrid.HitTestInfo = myGrid.HitTest(e.X, e.Y)
Console.WriteLine(myGrid.Item(myHitInfo.Row, myHitInfo.Column))
End Sub
有了上面的方法,大家其实还可以在里面加上由文调图的代码,也非常简单。
Related Items
Comments
Leave a comment
Or, take a look at Archives and Categories