//获取对象信息
pFeatIdObj = pIDArray.get_Element(0) as IFeatureIdentifyObj;
pIdObj = pFeatIdObj as IIdentifyObj;
pIdObj.Flash(pActiveView.ScreenDisplay);
IRowIdentifyObject pRowIdObj = pFeatIdObj as IRowIdentifyObject;//获取对象的属性值
int idx1 = pRowIdObj.Row.Fields.FindField("Name");
int idx2 = pRowIdObj.Row.Fields.FindField("Type");
string pName = pRowIdObj.Row.get_Value(idx1) as string;
string pType = pRowIdObj.Row.get_Value(idx2) as string;
frmIdentifyDlg.get_Info(pName, pType, pName);
frmIdentifyDlg.RefreshInfo();
//打开图层属性表
private void frmTable_Load(object sender, EventArgs e)
{
ILayer pLayer = m_pMap.get_Layer(0);
IFeatureLayer pFLayer = pLayer as IFeatureLayer;
IFeatureClass pFC = pFLayer.FeatureClass;
IFeatureCursor pFCursor = pFC.Search(null, false);
IFeature pFeature = pFCursor.NextFeature();
DataTable pTable = new DataTable();
DataColumn colName = new DataColumn("名称");
colName.DataType = System.Type.GetType("System.String");
pTable.Columns.Add(colName);
DataColumn colLevel = new DataColumn("级别");
colName.DataType = System.Type.GetType("System.String");
pTable.Columns.Add(colLevel);
DataColumn colA1 = new DataColumn("水量状况");
colA1.DataType = System.Type.GetType("System.Int16");
pTable.Columns.Add(colA1);
DataColumn colA2 = new DataColumn("流速状况");
colA2.DataType = System.Type.GetType("System.Int16");
pTable.Columns.Add(colA2);
DataColumn colA3 = new DataColumn("河岸稳定性");
colA3.DataType = System.Type.GetType("System.Int16");
pTable.Columns.Add(colA3);
DataColumn colA4 = new DataColumn("河床稳定性");
colA4.DataType = System.Type.GetType("System.Int16");
pTable.Columns.Add(colA4);
DataColumn colA5 = new DataColumn("无脊椎动物");
colA5.DataType = System.Type.GetType("System.Int16");
pTable.Columns.Add(colA5);
DataColumn colA6 = new DataColumn("水生植被");
colA6.DataType = System.Type.GetType("System.Int16");
pTable.Columns.Add(colA6);
DataColumn colA7 = new DataColumn("植被带宽度");
colA7.DataType = System.Type.GetType("System.Int16");
pTable.Columns.Add(colA7);
DataColumn colA8 = new DataColumn("生态结构");
colA8.DataType = System.Type.GetType("System.Int16");
pTable.Columns.Add(colA8);
DataColumn colA9 = new DataColumn("河岸连续性");
colA9.DataType = System.Type.GetType("System.Int16");
pTable.Columns.Add(colA9);
DataColumn colA10 = new DataColumn("水环境容量");
colA10.DataType = System.Type.GetType("System.Int16");
pTable.Columns.Add(colA10);
DataColumn colA11 = new DataColumn("河流曲度");
colA11.DataType = System.Type.GetType("System.Int16");
pTable.Columns.Add(colA11);
DataColumn colA12 = new DataColumn("景观建设率");
colA12.DataType = System.Type.GetType("System.Int16");
pTable.Columns.Add(colA12);
DataColumn colA13 = new DataColumn("景观美感度");
colA13.DataType = System.Type.GetType("System.Int16");
pTable.Columns.Add(colA13);
int idxOfName = pFC.FindField("Name");
int idxOfLevel = pFC.FindField("Type");
int idxOfFlow = pFC.FindField("水量状况");
while (pFeature != null)
{
string name = pFeature.get_Value(idxOfName).ToString();
string level = pFeature.get_Value(idxOfLevel).ToString();
int [] Ax = new int[13];
for (int i = idxOfLevel+1; i < pFC.Fields.FieldCount-1; i++)
{
Ax[i - idxOfLevel] = Convert.ToInt16 (pFeature.get_Value(i));
}
DataRow pRow = pTable.NewRow();
pRow[0] = name;
pRow[1] = level;
for (int i = 0; i < 13; i++)
{
pRow[i + 2] = Ax[i];
}
pTable.Rows.Add(pRow);
pFeature = pFCursor.NextFeature();
}
dataGridView1.DataSource = pTable;
}
//修改数据表
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
ILayer pLayer = m_pMap.get_Layer(0);
IFeatureLayer pFLayer = pLayer as IFeatureLayer;
IFeatureClass pFC = pFLayer.FeatureClass;
IFeatureCursor pFCursor = pFC.Search(null, false);
IFeature pFeature = pFCursor.NextFeature();
pFeature = pFC.GetFeature(e.RowIndex);
int rowIdx = 0;
int idxStartPosition = pFC.FindField("Name");
string pFieldName = pFC.Fields.get_Field(e.ColumnIndex + idxStartPosition).Name;
object newvalue = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
bool p = StoreFeatureInfo(pFeature, pFieldName, newvalue);
}
private bool StoreFeatureInfo(IFeature pFeature, string FieldName, object
FieldNewValue) ///修改要素属性值
{
///</summary>
///<param name="pFeature">所要修改要素</param>
///<param name="FieldName">所要修改的字段名</param>
///<param name="FieldNewValue">要素新值</param>
try
{
IFeatureClass pFeatureClass = pFeature.Class as IFeatureClass;
IDataset pDataset = pFeatureClass as IDataset;
IWorkspace pWorkspace = pDataset.Workspace;
IWorkspaceEdit pWorkspaceEdit = pWorkspace as IWorkspaceEdit;
//
if (pFeature == null) return false;
int iField = pFeature.Fields.FindField(FieldName);
if (pFeature.Fields.get_Field(iField).Type ==
esriFieldType.esriFieldTypeGeometry ||
pFeature.Fields.get_Field(iField).Type ==
esriFieldType.esriFieldTypeGlobalID ||
pFeature.Fields.get_Field(iField).Type ==
esriFieldType.esriFieldTypeGUID ||
pFeature.Fields.get_Field(iField).Type ==
esriFieldType.esriFieldTypeBlob)
{
MessageBox.Show("该字段不可以修改");
return false;
}
pWorkspaceEdit.StartEditing(false);
pWorkspaceEdit.StartEditOperation();
pFeature.set_Value(iField, FieldNewValue);
pFeature.Store();
pWorkspaceEdit.StopEditOperation();
pWorkspaceEdit.StopEditing(true);
return true;
}
catch (System.Exception err)
{
MessageBox.Show(err.Message.ToString());
MessageBox.Show("你所输入的值与该字段不匹配");
return false;
}
}