SuperMap二次开发入门(四)选择要素&显示属性表
上一节介绍了简单工具的添加,由于SuperMap组件封装的很好,所以每个工具仅需一行代码,非常简单。本章介绍通过鼠标框选地图要素,并显示所选要素的属性。属性表通过一个新的窗口进行显示,这样不会占用运行结果的主界面区域。
1、在窗体中 ToolStrip 工具条上,添加两个按钮,属性设置如下表所示,其它属性保持默认值。
2、打开程序,右击项目,选择【新建项】,添加【Windows窗体】项目。
3、为新添加的窗体增加set方法。当我们在主窗体点击打开属性表的时候,属性表窗体会显示,由于主窗体和属性表窗体是两个不同的类,所以其中的私有变量不能相互访问,通过添加方法,将主窗体中的地图变量传入子窗体。将主窗体引用的头文件复制至属性表窗体。
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[]、MessageBox、Recordset 、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好像不太一样,不知道怎么回事。之后的学习再来回顾这个问题。
地理信息科学
Writed By NX
QQ:1051926720