SuperMap二次开发入门(五)属性查询

SuperMap二次开发入门(五)属性查询

上一章已经介绍了新窗体的添加方法,以及类之间的变量是通过添加【SET】方法来实现的,所以本章直接添加不再赘述了,读者也可以参考上一章内容

https://blog.csdn.net/a1051926720/article/details/79916497

本章实现通过属性进行要素的查询,在属性表中输入查询条件进行查询,为了演示简单,这种查询方法没有验证查询语句的合理性,并不是按照软件操作规范的要求设计的,如若按照规范,则应该列出要素的属性字段和唯一值,此方法将在后续的提高章节实现。

1、新建【查询】子窗体,添加引用命名空间。添加【set】方法。

 SuperMap二次开发入门(五)属性查询_第1张图片

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】控件和一个按钮。

 SuperMap二次开发入门(五)属性查询_第2张图片

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,得到查询结果。

 SuperMap二次开发入门(五)属性查询_第3张图片


SuperMap二次开发入门(五)属性查询_第4张图片 

地理信息科学

Writed By NX

QQ:1051926720


你可能感兴趣的:(SuperMap二次开发)