我正在使用twincolselect显示一些行,并使用一个文本框允许用户过滤twincolselect中的行。 它运作良好,但是只对twincolselect的ItemCaptionPropertyId属性进行过滤,而我必须根据其他条件对twincolselect进行过滤。
实际上,在我的twincolselect中,我显示了客户的名称,当我在文本框中键入A时,我只会看到其名称中带有“ A”或“ a”的客户。 我还应该根据他们的客户编号进行过滤。 因此,我做了一个条件,如果文本框以数字开头=>尝试过滤客户编号(屏幕上不显示),并且文本为字符串,则需要过滤客户名称。
第二部分效果不错,但第一部分效果不佳。 有人可以帮忙吗?
请参见下面的代码。
=>我只是想知道如何更改此行以对Customer对象的任何其他属性进行过滤。
SimpleStringFilter filter = new SimpleStringFilter(form.getCustomers()。getItemCaptionPropertyId(),event.getText(),true,false);
//Creation of the twinColSelect
TwinColSelect customer= new TwinColSelect();
customer.setCaption(translate.message("XX"));
customer.setRows(10);
customer.setNullSelectionAllowed(Boolean.TRUE);
customer.setNewItemsAllowed(Boolean.FALSE);
customer.setMultiSelect(Boolean.TRUE);
customer.setImmediate(Boolean.TRUE);
customer.setLeftColumnCaption(translate.message("xx"));
customer.setRightColumnCaption("xx"));
customer.setWidth(UIConstants.SEARCH_COMPONENT_TABLE_WIDTH_PERCENTAGE,
Sizeable.UNITS_PERCENTAGE);
customer.setItemCaptionPropertyId("name");
customer.setRequired(Boolean.TRUE);
customer.setRequiredError(translate.message("xx"));
//The filter which works
Set<Customer> customers= (Set<Customer>)
form.getCustomerselect().getValue();
BeanItemContainer<Customer> beans = new
BeanItemContainer<Customer>(Customer.class, customers);
form.getCustomerselect().setContainerDataSource(new B
eanItemContainer<Customer>(Customer.class, form.getAllCustomer()));
// f = (Filterable)
form.getCustomerselect().getContainerDataSource();
f = (Filterable)
form.getCustomers().getContainerDataSource();
SimpleStringFilter filter = new
SimpleStringFilter(form.getCustomers().getItemCaptionPropertyId(),
event.getText(), true, false);
f.addContainerFilter(filter);
form.getCustomersSelect().setValue(customers);
form.getCustomersSelect().setEnabled(Boolean.TRUE);
form.getCustomersSelect().setImmediate(Boolean.TRUE);