获取form上同时被选中的多条数据及反选

获取form上同时选中的记录集

反选

获取多条数据

 

采取和系统一致的方法:

前提:表名:DavMultiSelect

        该表在form中被作为data source,被命名为DavMultiSelect

(1)声明一个DavMultiSelect表的表变量

(2)使用for循环遍历被选中的记录

(3)在for循环中处理每一条选中的记录

 

E.G.

 

    DavMultiSelect tmp;
    ;
    for(tmp = DavMultiSelect_DS.getFirst(true)?DavMultiSelect_DS.getFirst(true):DavMultiSelect_DS.cursor();tmp;tmp = DavMultiSelect_DS.getNext())
    {
         //在这里处理每一条记录  

         print tmp.Field1;
    }
   

有关方法:

(1)FormDataSource.getFirst([int mark, boolean fetchAhead])

        public Common getFirst([int mark, boolean fetchAhead])

        参数:

        mark:决定返回第一条记录或被mark所标识的记录。如果Mark不为zero,被Mark所标识的那条纪录会被返回,随后调用getNext会返回其他选中的记录。

        当在一个grid中多条记录被选中是,记录集被标识为mark = 1。

        fetchAhead:如果为false,只返回被cach起来的记录;如果为true,没有被cach起来的记录也会被先查找然后添加到cach中,然后返回所有选中的记录。如果选中的是一个大的记录集,设置为true时可能会很耗时。

(2)FormDataSource.markRecord(anty record[,int mark])

        参数:

        record:要mark的记录

        mark:标记值

        E.G.

        如果你选中一条记录,然后调用(延用上边的例子):

        DavMultiSelect _DS.markRecord(DavMultiSelect _DS.cursor());

        tmp = DavMultiSelect _DS.getFirst(2,true);

        这个时候,tmp和DavMultiSelect_DS.cursor是同一条记录

(3)FormDataSource.getNext()

        public Common getNext()

        会返回符合在getFirst中设置的过滤原则的下一条记录。

 

反选

 

注意:

(1)使用FormDataSource.getFirst([int mark,boolean fetchAhead]),如果参数mark=0的话,使用循环会返回当前DataSource的所有记录。

(2)如果FormDataSource上的记录被mark为大于零的任何整数,在element.redraw()后都会处于选中状态。

代码如下:

void clicked()
{
    DavQuery common;
    Map         map;
    ;
    map = new Map(Types::Int64,Types::Int64);
    for(common = DavQuery_DS.getFirst(true)?DavQuery_DS.getFirst(true):DavQuery_DS.cursor();common;common = DavQuery_DS.getNext())
    {
        if(!map.exists(common.RecId))
            map.insert(common.RecId,common.RecId);
        DavQuery_Ds.markRecord(common,0);
    }
    for(common = DavQuery_DS.getFirst(0)?DavQuery_DS.getFirst(0):DavQuery_DS.cursor();common;common = DavQuery_DS.getNext())
    {
        if(!map.exists(common.RecId))
        {
            DavQuery_DS.markRecord(common,1);
        }
    }
    super();
    element.redraw();
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值