初学者想在arcgine中想设置按属性查询功能,按书上一段代码执行获取图层属性字段对应的值,运行中断出错不懂为啥子?
// 5.获取唯一值按钮的单击事件
private void btnOnlyAttributeValue_Click(object sender, EventArgs e)
{
//将图层的某个字段进行唯一值获取操作,并将所有的唯一值显示在listBox2控件中
//使用FeatureClass对象的IDataset接口来获取dataset和workspace的信息
IDataset dataset = (IDataset)currentFeatureLayer.FeatureClass;
//使用IQueryDef接口的对象来定义和查询属性信息。通过IWorkspace接口的CreateQueryDef()方法创建该对象。
IQueryDef queryDef = ((IFeatureWorkspace)dataset.Workspace).CreateQueryDef();
//设置所需查询的表格名称为dataset的名称
queryDef.Tables = dataset.Name;
//设置查询的字段名称。可以联合使用SQL语言的关键字,如查询唯一值可以使用DISTINCT关键字。
queryDef.SubFields = "DISTINCT (" +currentFileName + ")";
//执行查询并返回ICursor接口的对象来访问整个结果的集合
ICursor cursor = queryDef.Evaluate();
//使用IField接口获取当前所需要使用的字段的信息
IFields fields = currentFeatureLayer.FeatureClass.Fields;
IField field = fields.get_Field(fields.FindField(currentFileName));
//对整个结果集合进行遍历,从而添加所有的唯一值
//使用IRow接口来操作结果集合。首先定位到第一个查询结果。
IRow row = cursor.NextRow();
//如果查询结果非空,则一直进行添加操作
while (row != null)
{
//对String类型的字段,唯一值的前后添加'和',以符合SQL语句的要求
if (field.Type == esriFieldType.esriFieldTypeString)
{
listBox2.Items.Add("\'" + row.get_Value(0).ToString() + "\'");
}
else
{
listBox2.Items.Add(row.get_Value(0).ToString());
}
//继续执行下一个结果的添加
row = cursor.NextRow();
}
}
1 个回复
朱新颖
赞同来自:
2,一般单表查询使用IQueryFilter即可,IQueryDef常用来进行多表查询
要回复问题请先登录或注册