将查询到的信息进行筛选过滤
首先这次的任务是根据查询条件将数据库的内容进行查询,但是由于新增加了几个条件,在数据库中并没有这个条件,所以增加了难度。
首先行政区中加入了深海,近海,特殊海域,需要在下拉框中加入这三个条件。
然后后边的所属矿权人和项目状态在数据库中也没有存,也需要自己写下拉列表。
初始化所属矿权人下拉树代码:
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语句中进行查询。