标签:标记   有关   start   edr   run   started   pre   call   tmp   
	一、MultiSelectionHelper class   
    MultiSelectionHelper    selectionHelper;
    ProdTable               localProdTable;
    FormRun                 fr;
    ;
    prodSet = new Set(Types::String);
    if (_args && _args.caller()  && _args.dataset() == TableNum(ProdTable))
    {
        fr = _args.caller();
        fds= _args.record().dataSource();
        selectionHelper = MultiSelectionHelper::createFromCaller(fr);
        for (localProdTable = selectionHelper.getFirst();
             localProdTable;
             localProdTable = selectionHelper.getNext())
        {
            prodSet.add(localProdTable.ProdId);
            if (localProdTable.createdBy != curUserId())
                icount++;
            if (localProdTable.ProdStatus > ProdStatus::StartedUp)
                jcount++;
        }
    }
	二、 Form上的多条数据和反选
	采取和系统一致的方法:
	前提:表名:DavMultiSelect
        该表在form中被作为data source,被命名为DavMultiSelect
(1)声明一个DavMultiSelect表的表变量
(2)使用for循环遍历被选中的记录
(3)在for循环中处理每一条选中的记录
 
    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:标记值
        如果你选中一条记录,然后调用(延用上边的例子):
        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();
	}
 
Form上多选
标签:标记   有关   start   edr   run   started   pre   call   tmp   
原文地址:https://www.cnblogs.com/xtwkh1973/p/10992897.html