SuperMap二次开发入门(四)选择要素&显示属性表

时间:2024-03-16 13:33:24

SuperMap二次开发入门(四)选择要素&显示属性表

上一节介绍了简单工具的添加,由于SuperMap组件封装的很好,所以每个工具仅需一行代码,非常简单。本章介绍通过鼠标框选地图要素,并显示所选要素的属性。属性表通过一个新的窗口进行显示,这样不会占用运行结果的主界面区域。

1、在窗体中 ToolStrip 工具条上,添加两个按钮,属性设置如下表所示,其它属性保持默认值。

 SuperMap二次开发入门(四)选择要素&显示属性表

2、打开程序,右击项目,选择【新建项】,添加【Windows窗体】项目。

 SuperMap二次开发入门(四)选择要素&显示属性表

 SuperMap二次开发入门(四)选择要素&显示属性表

3、为新添加的窗体增加set方法。当我们在主窗体点击打开属性表的时候,属性表窗体会显示,由于主窗体和属性表窗体是两个不同的类,所以其中的私有变量不能相互访问,通过添加方法,将主窗体中的地图变量传入子窗体。将主窗体引用的头文件复制至属性表窗体。

 SuperMap二次开发入门(四)选择要素&显示属性表

4、在主窗体申明一个属性表窗体变量

Form2 frm;  //定义一个属性表窗体

为【打开属性表】按钮添加事件函数

 private void toolStripQueryProperty_Click(object sender, EventArgs e)

        {

            if (frm == null || frm.IsDisposed)  //如果窗体为空或没有打开

            {

                frm = new Form2();  //新建一个窗口

            }

            frm.CurMap = mapControl1.Map;  //调用set方法传递参数,此时功能实现部分已经转至属性表窗体进行实现

            frm.Show();  //显示窗口

        }

5、在【属性表窗体】添加窗体加载事件代码,此代码是加载属性表数据的关键代码,其中调用了SuperMap中的几个接口和方法以及Windows的接口和方法,比如FindSelection(true)Selection[]MessageBoxRecordset DataGridView用到了很多方法,需要查看SuperMap的类库了解其功能。

private void Form2_Load(object sender, EventArgs e)

        {

            //获取选择集

            Selection[] selection = curMap.FindSelection(true);

            //判断选择集是否为空

            if (selection == null || selection.Length == 0)

            {

                MessageBox.Show("请选择要查询属性的空间对象");

                return;

            }

            //将选择集转换为记录

            Recordset recordset = selection[0].ToRecordset();

            this.dataGridView1.Columns.Clear();

            this.dataGridView1.Rows.Clear();

            for (int i = 0; i < recordset.FieldCount; i++)

            {

                //定义并获得字段名称

                String fieldName = recordset.GetFieldInfos()[i].Name;

                //将得到的字段名称添加到 dataGridView1 列中

                this.dataGridView1.Columns.Add(fieldName, fieldName);

            }

            //初始化 row

            DataGridViewRow row = null;

            //根据选中记录的个数,将选中对象的信息添加到 dataGridView1 中显示

            while (!recordset.IsEOF)

            {

                row = new DataGridViewRow();

                for (int i = 0; i < recordset.FieldCount; i++)

                {

                    //定义并获得字段值

                    Object fieldValue = recordset.GetFieldValue(i);

                    //将字段值添加到 dataGridView1 中对应的位置

                    DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell();

                    if (fieldValue != null)

                    {

                        cell.ValueType = fieldValue.GetType();

                        cell.Value = fieldValue;

                    }

                    row.Cells.Add(cell);

                }

                this.dataGridView1.Rows.Add(row);

                recordset.MoveNext();

            }

            this.dataGridView1.Update();

            recordset.Dispose();

        }

6、为【选择】按钮添加事件函数

 private void toolStripSelect_Click(object sender, EventArgs e)

        {

            mapControl1.Action = SuperMap.UI.Action.Select2;

        }

7、运行代码,点击【选择】按钮,选择要素,点击【打开属性表】按钮,显示属性数据。在试验过程中,发现属性表里显示的数据有点问题,每次显示的SMID好像不太一样,不知道怎么回事。之后的学习再来回顾这个问题。

 SuperMap二次开发入门(四)选择要素&显示属性表


地理信息科学

Writed By NX

QQ:1051926720