在上面的程序中我们实现了将一个新的图元加入到图层表中,这个图元的数据信息如下表:
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中多了一条空白的数据.
|