实现主附表结构的数据存储

    在071130日,我发了一篇《关于一个对象集合的求解》的文章。可能由于我没有表述清楚,至今没有人给我回复。前一段时间,我用C#实现了这一功能,但仍有一些不足之处,给大家拿出来做个靶子。欢迎大家批评指正!

我的需求是,有主附表的结构,主表里面包含单据日期、单据编号等信息,附表里包含与此主表相关的行项目,包含物料编号、数量等信息。我想这应该建立继承的类来实现,但我还不会用。我利用泛型,暂时是解决了这个问题。

我写了两个接口:IDocumentsIDocuments_Lines。也写了与之对应的DocumentsDocuments_Lines两个类。这两个类分别继承了前两个接口。IDocumentsDocuments中包含DocNumberDocDateLines三个属性和Add()Remove() 两个方法。IDocuments_LinesDocuments_Lines中包含ItemCodeQuantity两个属性和Add()GetLists()方法。

Documents类中的Lines属性的类型是IDocuments_Lines。为了访问Documents_Lines的集合,我不得在Documents_Lines中建立了一个公用的方法GetLists()。该方法返回一个List<>集合,然后在Documents类中的Add()方法,遍历这个集合,再把子表数据连同主表一起添加进去。

而在SBOSDK中,首先是在Documents_Lines里面,没有暴露类似于GetLists()之类的方法和属性。而且在Documents_Lines里会包含一个Count属性来记录当前的总条数,并能通过SetCurrentLine()方法来指定当前行。而且,在调用时也有区别:在SDK中调用如下:

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 1 None.gif Documents myd = myCompany.GetObject(Documents);
 2 None.gif
 3 None.gifMyd.DocNumber = 1 ”;
 4 None.gif
 5 None.gifMyd.DocDate = CDate(“ 2008 - 3 - 7 ”);
 6 None.gif
 7 None.gif 
 8 None.gif
 9 None.gif // 添加行1
10 None.gif
11 None.gifMyd.Lines.ItemCode = ”a”;
12 None.gif
13 None.gifMyd.Lines.Quantity = 1 ;
14 None.gif
15 None.gif 
16 None.gif
17 None.gif // 添加行2
18 None.gif
19 None.gifMyd.Lines.Add();
20 None.gif
21 None.gifMyd.Lines.ItemCode = ”b”;
22 None.gif
23 None.gifMyd.Lines.Quantity = 2 ;
24 None.gif
25 None.gif 
26 None.gif
27 None.gif // 添加主表
28 None.gif
29 None.gifMyd.Add()
30 None.gif
31 None.gif 
32 None.gif
33 None.gif // 完成。
34 None.gif

 

而对于我所做的类,调用方法如下:

 1 None.gif Documents myd = new  Documents();
 2 None.gif
 3 None.gifMyd.DocNumber = 1 ”;
 4 None.gif
 5 None.gifMyd.DocDate = CDate(“ 2008 - 3 - 7 ”);
 6 None.gif
 7 None.gif 
 8 None.gif
 9 None.gif // 添加行1
10 None.gif
11 None.gifMyd.Lines.ItemCode = ”a”;
12 None.gif
13 None.gifMyd.Lines.Quantity = 1 ;
14 None.gif
15 None.gifMyd.Lines.Add();
16 None.gif
17 None.gif 
18 None.gif
19 None.gif // 添加行2
20 None.gif
21 None.gif // 添加行2
22 None.gif
23 None.gifMyd.Lines.Add();
24 None.gif
25 None.gifMyd.Lines.ItemCode = ”b”;
26 None.gif
27 None.gifMyd.Lines.Quantity = 2 ;
28 None.gif
29 None.gif 
30 None.gif
31 None.gif // 添加主表
32 None.gif
33 None.gifMyd.Add()
34 None.gif

 

//完成。

这两个调用的方法的区别在于,在添加行时,SDK中每添加一行之前,先执行一次Lines.Add()方法(第一行不用),且最后一行之后,不再需要执行Lines.Add()方法;而我所做的添加行时,在每添加一行之后,必须执行一次Lines.Add()方法,才能把数据添入行集合。不知道为什么会有这样的差别呢?请高手指点,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值