zoukankan      html  css  js  c++  java
  • 实习任务——对查询结果进行筛选过滤

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

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

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

    	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语句中进行查询。

  • 相关阅读:
    【DOS命令】type
    【shell】$符号操作
    【C++百科】STL(Standard Template Library) 标准模板库简介
    【配置与安装】SSH 密钥类型的的选择(RSA, DSA or Other)
    【百科通识】CPU x86/x86-64/x64/i386
    【配置与安装】SSH远程开发
    【百科通识】.bat文件
    【vi】模式切换
    【vim】撤销与回退
    【C++】智能指针
  • 原文地址:https://www.cnblogs.com/mingey/p/6391191.html
Copyright © 2011-2022 走看看