实习任务——对查询结果进行筛选过滤

将查询到的信息进行筛选过滤

首先这次的任务是根据查询条件将数据库的内容进行查询,但是由于新增加了几个条件,在数据库中并没有这个条件,所以增加了难度。
首先行政区中加入了深海,近海,特殊海域,需要在下拉框中加入这三个条件。
然后后边的所属矿权人和项目状态在数据库中也没有存,也需要自己写下拉列表。

初始化所属矿权人下拉树代码:

	private ComboList initComboList1(ComboList combo1){
		ComboList com1=combo1;
		InternalList list=com1.getList();
		
		ListItem items=new ListItem(list);
		items.setText("全部");
		items.setData("全部");
		
		ListItem items1=new ListItem(list);
		items1.setText("中石油");
		items1.setData(1);

		ListItem items2=new ListItem(list);
		items2.setText("中石化");
		items2.setData("2");
		
		ListItem items3=new ListItem(list);
		items3.setText("中海油");
		items3.setData("3");
		
		ListItem items4=new ListItem(list);
		items4.setText("中联煤");
		items4.setData("4");
		
		ListItem items5=new ListItem(list);
		items5.setText("延长油矿");
		items5.setData("5");
		
		ListItem items6=new ListItem(list);
		items6.setText("地方油田");
		items6.setData("6");
		
		ListItem items7=new ListItem(list);
		items7.setText("地方企业");
		items7.setData("9");
		
		com1.setSelection(0);
		return com1;
	}

初始化项目状态和上面大同小异,不列出来了。
最后是初始化行政区,初始化行政区首先写一个初始化下拉树的方法。
由于原表中不存在三个海域,所以需要自己手动添加,设置他们的stdcode和stdname。

public class YQComboListHelper {
	public static String XINGZHENGQUHUA="DIC_ADMINISTRATIVE_DIVISIONS";
	public static List<FBaseDataObject> getBaseDataYQList(Context context,String tableName){
		List<FBaseDataObject> list = BaseDataCenter.getObjectList(context, tableName);
		
		
		if("DIC_ADMINISTRATIVE_DIVISIONS".equals(tableName)){
			String name=context.getLogin().getUser().getName();
		    Pattern pattern = Pattern.compile("^[0-9]{6}$");
	        Matcher isNum = pattern.matcher(name);
	        if (isNum.matches()  && name.equals("100000")) {
	        	List<FBaseDataObject> ranks =new ArrayList<FBaseDataObject>();
				GUID unitGuid = ContextManager.getContext().getLogin().getUserCurrentOrg();
//				String unitCode = BaseDataCenter.findObject(ContextManager.getContext(), "MD_ORG", unitGuid).getStdCode();
				String code = "0000";
			
				for(FBaseDataObject f:list){
					if(f.getStdCode().endsWith(code) && !f.getStdCode().equals(100000) && !f.getStdCode().equals("710000") && !f.getStdCode().equals("810000") && !f.getStdCode().equals("820000")){
						ranks.add(f);
					}
				}
				
				TableDefine define = BaseDataCenter.getObjectList(context, tableName).get(0).getTable().getTable();
				ITable tab = new Table(define);
				//新增油气项目  海域类别节点(原MD_org表中无此类数据)
				BaseDataObjectImpl hysh1 = new BaseDataObjectImpl(tab);
				hysh1.setStdCode("800001");
				hysh1.setStdName("特殊海域");
				ranks.add(hysh1);
				BaseDataObjectImpl hyjh2 = new BaseDataObjectImpl(tab);
				hyjh2.setStdCode("800002");
				hyjh2.setStdName("深海");
				ranks.add(hyjh2);
				BaseDataObjectImpl tshy3 = new BaseDataObjectImpl(tab);
				tshy3.setStdCode("800003");
				tshy3.setStdName("近海");
				ranks.add(tshy3);
				//三类海域类别
				return ranks;
	        }
	        else if(isNum.matches() && name.substring(2, 6).equals("0000") && !name.equals("100000") )
	        {
	        	List<FBaseDataObject> ranks =new ArrayList<FBaseDataObject>();
				GUID unitGuid = ContextManager.getContext().getLogin().getUserCurrentOrg();
//				String unitCode = BaseDataCenter.findObject(ContextManager.getContext(), "MD_ORG", unitGuid).getStdCode();
			
				for(FBaseDataObject f:list){
					if( f.getStdCode().equals(name)){
						ranks.add(f);
					}
				}
				
				
				return ranks;
	        }
				
		}
		return list;
	}
	/*根据STDCODE获取对应基础数据对象*/
	public static FBaseDataObject getBaseDataByCode(Context context,String tableName,String stdCode){
		FBaseDataObject data = BaseDataCenter.findObject(context, tableName, stdCode);
		return data;
	}
	/**
	 * 获取下拉列表中选中的选项的值
	 * @param comboList
	 * @return String类型
	 */
	public static String selectComboListData(ComboList comboList){
		ListItem[] item = comboList.getList().getSelection();
		if(item!=null && item.length>0){
			String result = (String)item[0].getData(); 
			if(result!=null)
				return result; 
		}
		return null;
	}
	
	/**
	 * 获取下拉列表选中的显示内容
	 * @param comboList
	 * @return
	 */
	public static String selectComboListText(ComboList comboList){
		ListItem[] item = comboList.getList().getSelection(); 
		if(item!=null && item.length>0)
			return item[0].getText();
		return null;
	}
	
	
	
	/**
	 * 根据数组内容,把数组内容转换为下拉列表
	 * @param list		下拉控件
	 * @param values	数组
	 * @param includeDefault 	是否包含默认下拉值
	 * @param context
	 * @return
	 */
	public static void initComboList(ComboList list,String[][] values,boolean includeDefault){
		InternalList iList = list.getList();
		for (int i = 0; i < values.length; i++) {
			ListItem item = new ListItem(iList);
			item.setID(values[i][0]);
			item.setData(values[i][0]);
			item.setText(values[i][1]);
		}
	}
	
	/**
	 * 根据基础数据内容初始化一个下拉列表
	 * @param comboList
	 * @param list
	 * @param includeDefault
	 * @return
	 */
	public static void initComboList(ComboList comboList,List<FBaseDataObject> list,boolean includeDefault){
		InternalList iList = comboList.getList();
		for(FBaseDataObject obj :list){
			ListItem item = new ListItem(iList);
			item.setID(obj.getStdCode());
			item.setData(obj.getStdCode());
			item.setText(obj.getStdName());
		}
	}
	/**
	 * 修改数据表格的属性,把属性修改为下拉列表形式
	 * @param grid
	 * @param comboList	下拉列表(包含初始化值)
	 * @return
	 */
	public static GridCellEditor getGridComboList(Grid grid,final ComboList comboList,final int index){
		return new GridCellEditor(grid) {
			@Override
			protected Control createControl(Grid grid) {
				comboList.setSelection(index);
				return comboList;
			}
			@Override
			public int getFace(){
				return JWT.GRID_EDITOR_FACE_LIST;
			}
		};
	}
	
	
	public static GridCellEditor getGridComboTree(Grid grid,final ComboTree tree){
		return new GridCellEditor(grid) {
			
			@Override
			protected Control createControl(Grid grid) {
				return tree;
			}
		};
	}

	public static void initComboList(ComboList list, String[] value) {
		InternalList iList = list.getList();
		for (int i = 0; i < value.length; i++) {
			ListItem item = new ListItem(iList);
			item.setID(String.valueOf(i));
			item.setData(value[i]);
			item.setText(value[i]);
		}
	}
	
	/*行政区划列表*/
	public static List<FBaseDataObject> getxzqhList(Context context){
		return getBaseDataYQList(context, XINGZHENGQUHUA);
	}
}

然后再调用这个方法

	private void initSearchs() {
		// TODO Auto-generated method stub
		//行政区划
		List<FBaseDataObject> xzqh_list = YQComboListHelper.getxzqhList(getContext());
		YQComboTreeUtils.initComboTree(controls.cbt_1.getTree(),xzqh_list,false,getContext());
		controls.cbt_1.setPanelWidth(100);
	}

然后下拉树就设置好了,然后需要按照这几个查询条件进行查询,将下拉树选中的信息传入到sql方法中,用sql语句进行查询。
刚开始查询一直出错,因为最开始写的代码是这样的

	private void flushGrid() {
		// TODO Auto-generated method stub
		xmlist=service.getYQPerambulateLicence(controls.cbt_1.getText(),controls.cbl_2.getList().getSelection()[0].getData(),controls.txt_1.getText(),controls.cbl_1.getList().getSelection()[0].getText());
		controls.lbl_8.setText(xmlist.size()+"");
	}

后边两个下拉树可以查询到数据,因为这个是自己手动设置的,然后第一个下拉树,传进去的是行政区的recid,但是由于三个海域是自己添加的,只有stdcode和stdname,没有recid,所以会出现空指针,查询出错。

所以后来这样写

	private void flushGrid() {
		// TODO Auto-generated method stub
		xmlist=service.getYQPerambulateLicence(stdcode,controls.cbl_2.getList().getSelection()[0].getData(),controls.txt_1.getText(),controls.cbl_1.getList().getSelection()[0].getText());
		controls.lbl_8.setText(xmlist.size()+"");
		
	}
	
	/**
	 * 查询按钮
	 * @param mouseEvent
	 */
	protected void on_lbl_5_Click(MouseEvent mouseEvent) {
		// TODO Auto-generated method stub
		if(controls.cbt_1.getText() != null &&  !"".equals(controls.cbt_1.getText()) &&!"null".equals(controls.cbt_1.getText()) )
		{
			stdcode=BaseDataCenter.findObjectbyObjectID(getContext(), "DIC_ADMINISTRATIVE_DIVISIONS", GUID.valueOf(controls.cbt_1.getText())).getStdCode();
			stdcode=stdcode.substring(0, 2);
		}
		else if(controls.cbt_1.getText() != null && !"".equals(controls.cbt_1.getText()))
		{
			TreeItem[] rootItem = controls.cbt_1.getTree().getSelection();
			stdcode = ((String) rootItem[0].getData()).substring(5, 6);
//			stdcode=((BaseDataObjectImpl)controls.cbt_1.getControl().getData()).getStdCode()==null?null:((BaseDataObjectImpl)controls.cbt_1.getData()).getStdCode().substring(5, 6);
			
		}
		else
		{
			stdcode=null;
		}
		flushGrid();
		paginateRender();
	}

首先由于除三个海域其他行政区recid都有值,所以可以直接传recid所对应的stdcode值,
对于这三个海域,首先查找这棵树的节点上的数据,然后直接得到它的stdcode值。
最后就可以根据传过去的值在sql语句中进行查询。

原文地址:https://www.cnblogs.com/mingey/p/6391191.html