发表用户:fit4u
收集整理:James.Liu
相关讨论:http://www.mygis.com.cn/forum/dispbbs.asp?boardID=4&ID=5544
信息原始来源:fit4u

文章标题:数据绑定之我见(delphi版 部分程序和讲解)


自己参考了很多代码(大部分是vb)还是一直没有太搞明白数据绑定得很多细节
书里面写得总是不能彻底领悟。无论如何 贴一贴自己的一些体会。
完整程序将在这两天贴出来

一。
适用于各种图元类型通用得数据绑定
即:ds:=Map1.Datasets.Add(miDataSetLayer,editlayer,Emptyparam,Emptyparam,Emptyparam,Emptyparam,emptyparam,Emptyparam);

首先 我们创建图层
1.规定了图层 .tbl表中各属性定义 以及相关文件(.dat .map .id .ind .tbl)位置

    lyrinfo:= CoLayerInfo.Create;
    flds := cofields.Create;
    flds.AddStringField('linetype',16,emptyparam);
    lyrinfo.Type_:=miLayerInfoTypeNewTable;
    lyrinfo.AddParameter( 'FileSpec', '\line1.tab');
    lyrinfo.AddParameter ('Name', 'line1')      ;
    lyrinfo.AddParameter ('Fields', flds)          ;
   Map1.Layers.Add(lyrinfo, 1);
  editlayer:=map1.Layers.item[1];

2.完成绑定

      ds:=Map1.Datasets.Add(miDataSetLayer,editlayer,Emptyparam,Emptyparam,Emptyparam,Emptyparam,emptyparam,Emptyparam);

3。我们可以从数据库中依次读数据
然后把属性值按步骤1中创建图层属性的顺序添加到数据集中 
 id:=....//从数据库中取值 
rv1.dataset:=ds;
 rv1.field:=ds.Fields.Item[1];
 rv1.value:=id;
 rvs1.add(rv1);

4. 添加图元 完成后我们饭线在.dat文件中加入了绑定数据
EditLayer.AddFeature(newObj,rvs1);

5.别忘了把点或线画在图层中
 newObj := Map1.FeatureFactory.CreateLine(pts, newstyle);
or 
newobj:=map1.featurefactory.CreateSymbol(pt.newstyle)

二。
只适用于点图元的绑定

Map1.Datasets.Add(miDatasetODBC,parm,emptyparam,'name','id',BindlayerObject,emptyparam,false);
直接建立数据库与图层之间的绑定关系
这种方法似乎不太容易添加新的图元 而且 一定要用
BindlayerObject:= CoBindlayer.Create;  BindlayerObject.RefColumn1:='x';
BindlayerObject.RefColumn2:='y';
BindlayerObject.LayerType:=miBindlayerTypeXY;
 才能建立好空间数据与属性数据的对应关系。并且能够自动把点画在图层中
一些程序
  
flds := cofields.Create;
  flds.Add('x','x',miaggregationauto,mitypenumeric);
   flds.Add('y','y',miaggregationauto,mitypenumeric);
   flds.Add('postnumber','postnumber',miaggregationauto,mitypenumeric);
    BindlayerObject:= CoBindlayer.Create;
  // BindlayerObject.Filespec := '\test.tab';
   BindlayerObject.LayerName:='addnew';
   BindlayerObject.RefColumn1:='x';
   BindlayerObject.RefColumn2:='y';

   BindlayerObject.LayerType:=miBindlayerTypeXY;
   Mydataset:= Map1.Datasets.Add(miDatasetODBC,parm,emptyparam,'postnumber',emptyparam,BindlayerObject,emptyparam,false);

其实我个人认为第一种方法很清楚
建立图层---〉完成绑定---〉添加数据--〉显示数据
而且使用范围广
就用它就好了
第二种方法优点在于自动建立数据库与图层之间数据绑定关系
即空间数据与属性数据的关联
但是一旦建立了dataset 修改不大容易  

希望大家指正。谢谢

James.Liu

绑定的有固定图层类型的绑定,关键字绑定,点坐标绑定,CODE绑定这么几种,最常见的就是楼主所阐述的,不错!!!