首先此次的任務是根據查詢條件將數據庫的內容進行查詢,可是因爲新增長了幾個條件,在數據庫中並無這個條件,因此增長了難度。
首先行政區中加入了深海,近海,特殊海域,須要在下拉框中加入這三個條件。
而後後邊的所屬礦權人和項目狀態在數據庫中也沒有存,也須要本身寫下拉列表。
java
初始化所屬礦權人下拉樹代碼:sql
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語句進行查詢。
剛開始查詢一直出錯,由於最開始寫的代碼是這樣的ide
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,因此會出現空指針,查詢出錯。ui
因此後來這樣寫指針
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語句中進行查詢。code