物探论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 735|回复: 0

C#开发GIS应用简明教程[八]

[复制链接]
发表于 2013-3-15 18:09:44 | 显示全部楼层 |阅读模式
在上面的程序中我们实现了将一个新的图元加入到图层表中,这个图元的数据信息如下表:
ID
名称
月供年限
水电费
0003
C栋
20
21.73

    应该要注意的是我们首先还是使用了DataSets.Add将数据读出来,再使用get_RowValues得到行数据结构,然后才是对行数据的赋值.
    运行程序,单击button1,可以看到左边的ListView中只有两条记录,再单击button2,看到图层上增加了一个蓝色的矩形图元,这就是我们增加的带数据的图元,再单击button1,可以看到新增图元的数据信息出现在左边的ListView中.

    3.修改数据(Data Modifying)
    现在,要在窗口中添加另一个按钮button3了.这个按钮要实现的功能是将"A栋"的名称改成"A1栋".也就是说,我们要对A栋的数据进行修改.这个按钮的代码如下:
MapXLib.FindFeature ftrRes=null;
MapXLib.Points pts=new MapXLib.PointsClass();
MapXLib.Point pt=new MapXLib.PointClass();
MapXLib.RowValues rvs=new MapXLib.RowValuesClass();
MapXLib.Fields flds=new MapXLib.FieldsClass();
MapXLib.Layer lyr=axMap1.Layers._Item("HouseLayer");
MapXLib.Dataset dts=null;
ftrRes=axMap1.Layers._Item("HouseLayer").Find.Search("0001","");
if (ftrRes.FindRC % 10==1)
{
    flds.Add("ID","ID",MapXLib.AggregationFunctionConstants.miAggregationSum,
MapXLib.FieldTypeConstants.miTypeString);
    flds.Add("名称","名称",MapXLib.AggregationFunctionConstants.miAggregationSum,
MapXLib.FieldTypeConstants.miTypeString);
    flds.Add("月供年限","月供年限",MapXLib.AggregationFunctionConstants.miAggregationSum,
MapXLib.FieldTypeConstants.miTypeInteger);
    flds.Add("水电费","水电费",MapXLib.AggregationFunctionConstants.miAggregationSum,
MapXLib.FieldTypeConstants.miTypeFloat);

dts=axMap1.DataSets.Add(MapXLib.DatasetTypeConstants.miDataSetLayer,lyr,lyr.Name,
0,0,0,flds,false);
    for (int i=0;i<dts.RowCount;i++)
    {
       if (dts.get_Value(i,"ID").ToString().Trim()=="0001")
       {
           rvs=dts.get_RowValues(i);
           rvs._Item("名称").Value="A1栋";
           ftrRes.Update(ftrRes,rvs);
           break;
       }
    }
    axMap1.DataSets.RemoveAll();
}

   可以看到,我们使用了前面章节所介绍的查找图元的技术.然而在给行数据赋值的时候仍然不得不在数据集中进行循环,以取得其它行数据,实际上,如果通过控件(例如DataGrid或ListView)取到了图元的数据,是不必进行这样的循环的,直接对RowValue的所有字段都进行赋值就可以了.

    4.删除数据(Data Deletion)
    删除数据其实就是删除图元,只要找到图元,直接删除就可以了.但是要注意的是,因为图元包含了数据,所以在删除数据以后还要紧缩表.好在紧缩表也十分简单.
    仍然使用我们前面的例子,加一个button4,在它的单击事件中编写代码如下:

MapXLib.FindFeature ftrRes=null;
ftrRes=axMap1.Layers._Item("HouseLayer").Find.Search("0003","");
if (ftrRes.FindRC % 10 ==1)
{
    axMap1.Layers._Item("HouseLayer").DeleteFeature(ftrRes);
}

//紧缩表
axMap1.Layers._Item("HouseLayer").Pack(MapXLib.LayerPackConstant.miPackAll);

    如果在删除图元以后没有紧缩表的话,单击button1,将会看到ListView中多了一条空白的数据.

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|物探论坛 ( 鄂ICP备12002012号 微信号:iwutan )

GMT+8, 2024-5-10 23:29 , Processed in 0.100680 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表