SuperMap二次开发入门(五)属性查询
上一章已经介绍了新窗体的添加方法,以及类之间的变量是通过添加【SET】方法来实现的,所以本章直接添加不再赘述了,读者也可以参考上一章内容
https://blog.csdn.net/a1051926720/article/details/79916497
本章实现通过属性进行要素的查询,在属性表中输入查询条件进行查询,为了演示简单,这种查询方法没有验证查询语句的合理性,并不是按照软件操作规范的要求设计的,如若按照规范,则应该列出要素的属性字段和唯一值,此方法将在后续的提高章节实现。
1、新建【查询】子窗体,添加引用命名空间。添加【set】方法。
2、在主窗体工具条添加【查询】按钮,添加一个成员变量,表示【查询】子窗体。并添加点击事件
Form3 frm1; //定义一个SQL查询窗体
private void toolStripSQLQuery_Click(object sender, EventArgs e)
{
if (frm1 == null || frm1.IsDisposed) //如果窗体为空或没有打开
{
frm1 = new Form3(); //新建一个窗口
}
frm1.CurMap = mapControl1.Map; //调用set方法传递参数
frm1.ShowDialog();//显示窗口
}
3、在【查询】子窗体添加一个【Label】控件,一个【TextBox】控件和一个按钮。
4、添加查询功能实现函数。
private void SQLQuery()
{
//判断 toolStripTextBox1 的输入内容是否为空
if (textBox1.Text.Length == 0)
{
MessageBox.Show("查询信息不能为空");
return;
}
//定义图层个数
Int32 layerCount = curMap.Layers.Count;
//判断当前地图窗口中是否有打开的图层
if (layerCount == 0)
{
MessageBox.Show("请先打开一个矢量数据集!");
return;
}
//定义查询条件信息
QueryParameter queryParameter = new QueryParameter();
queryParameter.AttributeFilter = textBox1.Text;
queryParameter.CursorType = CursorType.Static;
Boolean hasGeometry = false;
//遍历每一个图层,实现多图层查询
foreach (Layer layer in curMap.Layers)
{
//得到矢量数据集并强制转换为矢量数据集类型
DatasetVector dataset = layer.Dataset as DatasetVector;
if (dataset == null)
{
continue;
}
//通过查询条件对矢量数据集进行查询,从数据集中查询出属性数据
Recordset recordset = dataset.Query(queryParameter);
//判断是否有查询结果
if (recordset.RecordCount > 0)
{
hasGeometry = true;
}
//把查询得到的数据加入到选择集中(使其高亮显示)
Selection selection = layer.Selection;
selection.FromRecordset(recordset);
recordset.Dispose();
}
//没有查询结果,弹出提示
if (!hasGeometry)
{
MessageBox.Show("没有符合查询条件的结果或查询条件有误,请重新确认后查询!");
}
//当可创建对象使用完毕后,使用 Dispose 方法来释放所占用的内部资源
queryParameter.Dispose();
//刷新地图窗口显示
curMap.Refresh();
hasGeometry = false;
}
5、添加【查询】按钮点击事件。
private void button1_Click(object sender, EventArgs e)
{
SQLQuery(); //调用查询函数
this.Close(); //子窗体关闭
}
6、运行代码,输入条件【SmID<6】,得到查询结果。
地理信息科学
Writed By NX
QQ:1051926720