//在点击“获取唯一属性值”按钮时触发事件,执行本函数
//对图层的某个字段进行唯一值获取操作,并将所有的唯一值显示在listBoxValues控件中
private void buttonGetUniqeValue_Click(object sender, EventArgs e)
{
try
{
/*
//使用FeatureClass对象的IDataset接口来获取dataset和workspace的信息
IDataset dataset = (IDataset)currentFeatureLayer.FeatureClass;
//使用IQueryDef接口的对象来定义和查询属性信息。通过IWorkspace接口的CreateQueryDef()方法创建该对象。
IQueryDef queryDef = ((IFeatureWorkspace)dataset.Workspace).CreateQueryDef();
//设置所需查询的表格名称为dataset的名称
MessageBox.Show(dataset.Name);
queryDef.Tables = dataset.Name;
MessageBox.Show(currentFieldName);
//设置查询的字段名称。可以联合使用SQL语言的关键字,如查询唯一值可以使用DISTINCT关键字。
queryDef.SubFields = “DISTINCT (” + currentFieldName + “)”;
//执行查询并返回ICursor接口的对象来访问整个结果的集合
ICursor cursor = queryDef.Evaluate();
//使用IField接口获取当前所需要使用的字段的信息
IFields fields = currentFeatureLayer.FeatureClass.Fields;
IField field = fields.get_Field(fields.FindField(currentFieldName));
//对整个结果集合进行遍历,从而添加所有的唯一值
//使用IRow接口来操作结果集合。首先定位到第一个查询结果。
IRow row = cursor.NextRow();
//如果查询结果非空,则一直进行添加操作
while (row != null)
{
//对String类型的字段,唯一值的前后添加'和',以符合SQL语句的要求
if (field.Type == esriFieldType.esriFieldTypeString)
{
listBoxValues.Items.Add("\'" + row.get_Value(0).ToString() + "\'");
}
else
{
listBoxValues.Items.Add(row.get_Value(0).ToString());
}
//继续执行下一个结果的添加
row = cursor.NextRow();
}
*
*以上这种方法由于workspace的原因(需要在同一个workspace中),无法成功使用。
*/
IQueryFilter pQueryfilter = new QueryFilterClass();
IFeatureCursor pFeatureCursor = null;
pQueryfilter.SubFields = currentFieldName;
pFeatureCursor = currentFeatureLayer.FeatureClass.Search(pQueryfilter, true);
IDataStatistics pDataStati = new DataStatisticsClass();
pDataStati.Field = currentFieldName;
pDataStati.Cursor = (ICursor)pFeatureCursor;
IEnumerator pEnumertaor = pDataStati.UniqueValues;
pEnumertaor.Reset();
while (pEnumertaor.MoveNext())
{
object obj = pEnumertaor.Current;
listBoxValues.Items.Add(obj.ToString());
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}