0
ombobox onchange 이벤트가 트리거 될 때 ZP 피벗 테이블에서 데이터를 다시로드해야합니다.combobox onchange 이벤트 트리거시 Zuk PivotTable에서 새 값으로 데이터를 다시로드하는 방법
사용자가 comobox {아래 코드와 같이}에서 값을 변경하면 데이터가 사용자 선택에 따라 변경되어야합니다.
이있는 index.zul 아래
<window apply="org.zkoss.pivot.demo.PivotDemoBaseController" >
<hlayout>
<panel id="main" hflex="1" border="normal">
<caption label="2012 Data">
<toolbarbutton id="exportCsvBtn" label="Export CSV" />
<toolbarbutton id="exportXlsBtn" label="Export XLS" />
<toolbarbutton id="exportXlsxBtn" label="Export XLSX" />
</caption>
<panelchildren>
<vlayout spacing="0">
<pivottable id="pivot" hflex="1" pageSize="15" >
<combobox model="${lm}" id="selectGeo"/>
<div>All People</div>
</pivottable>
<div id="descDiv" />
</vlayout>
</panelchildren>
</panel>
<panel id="field" title="Control" width="300px" border="normal" >
<panelchildren>
<vlayout style="padding: 10px">
<!-- Predefined scenario: -->
<hlayout id="preDef" spacing="0" />
<div class="footnote" style="padding: 5px 0">(Drag fields among the areas below)</div>
<pivot-field-control id="pfc" height="300px" />
<hlayout hflex="1">
<checkbox id="autoUpdate" label="Auto Update" checked="true" />
<div hflex="1" />
<!-- <button id="updateBtn" label="Update" disabled="true" autodisable="+self" /> -->
</hlayout>
<separator />
<checkbox id="colGrandTotal" label="Enable grand total for columns" />
<checkbox id="rowGrandTotal" label="Enable grand total for rows" />
<div>
<radiogroup id="dataOrient">
Data field orientation:
<radio id="colOrient" label="column" />
<radio id="rowOrient" label="row" />
</radiogroup>
</div>
</vlayout>
</panelchildren>
</panel>
</hlayout>
</window>
는
공용 클래스 PivotDemoBaseController가 {
private static final long serialVersionUID = -7531153593366258488L;
private static final String[] TITLES = new String[] { "(Data Title)", "(Column Title)", "(Row Title)" };
@Wire
private Pivottable pivot;
@Wire
private PivotFieldControl pfc;
@Wire
private Button updateBtn;
@Wire
private Checkbox colGrandTotal, rowGrandTotal;
@Wire
private Radio colOrient, rowOrient;
@Wire
private Hlayout preDef;
@Wire
private Div descDiv;
private TabularPivotModel _model;
@Wire
private Combobox selectGeo;
private CellStyleConfigurator styleConfigurator;
public void onCheck$autoUpdate(CheckEvent event) {
boolean deferred = !event.isChecked();
pfc.setDeferredUpdate(deferred);
if (!deferred)
updateBtn.setDisabled(true);
}
@Listen("onChange = #selectGeo")
public void onChangeSelectGeo(Event event) {
String geography = selectGeo.getValue();
System.out.println("Value---"+geography);
}
public void onClick$updateBtn() {
pfc.update();
}
public void onPivotFieldControlChange$pfc() {
if (!pfc.isUpdated())
updateBtn.setDisabled(false);
}
public void onCheck$colGrandTotal(CheckEvent event) {
System.out.println("PivotDemoBaseController.onCheck$colGrandTotal()");
pivot.setGrandTotalForColumns(event.isChecked());
}
public void onCheck$rowGrandTotal(CheckEvent event) {
pivot.setGrandTotalForRows(event.isChecked());
}
public void onCheck$dataOrient(CheckEvent event) {
pivot.setDataFieldOrient(((Radio)event.getTarget()).getLabel());
}
public void onClick$exportCsvBtn() throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
PivotExportContext context = Exports.getExportContext(pivot, true, TITLES);
Exports.exportCSV(out, context);
Filedownload.save(out.toByteArray(), "text/csv", "pivot.csv");
try {
out.close();
} catch (IOException e) {}
}
public void onClick$exportXlsBtn() throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
PivotExportContext context = Exports.getExportContext(pivot, true, TITLES);
Exports.exportExcel(out, "xls", context, styleConfigurator);
Filedownload.save(out.toByteArray(), "application/vnd.ms-excel", "pivot.xls");
try {
out.close();
} catch (IOException e) {}
}
public void onClick$exportXlsxBtn() throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
PivotExportContext context = Exports.getExportContext(pivot, true, TITLES);
Exports.exportExcel(out, "xlsx", context, styleConfigurator);
Filedownload.save(out.toByteArray(), "application/vnd.ms-excel", "pivot.xlsx");
try {
out.close();
} catch (IOException e) {}
}
@NotifyChange("*")
@Override
public void doAfterCompose(Component comp) throws Exception {
System.out.println("PivotDemoBaseController.doAfterCompose()");
super.doAfterCompose(comp);
StaticPivotModelFactory pmf = StaticPivotModelFactory.INSTANCE;
//PivotModelFactory pmf= (PivotModelFactory) arg.get("factory");
_model = pmf.build();
pivot.setModel(_model);
pfc.setModel(_model);
Executions.createComponents(pmf.getDescriptionURI(), descDiv, null);
loadConfiguration(pmf.getDefaultConfigurator());
// load predefined scenario
for(PivotConfigurator conf : pmf.getConfigurators())
preDef.appendChild(getPreDefDiv(conf));
}
private void initControls() {
System.out.println("PivotDemoBaseController.initControls()");
// grand totals
colGrandTotal.setChecked(pivot.isGrandTotalForColumns());
rowGrandTotal.setChecked(pivot.isGrandTotalForRows());
// data orientation
("column".equals(pivot.getDataFieldOrient()) ?
colOrient : rowOrient).setChecked(true);
pfc.syncModel(); // field control
}
private Component getPreDefDiv(final PivotConfigurator conf) {
Div div = new Div();
div.setHflex("1");
div.setSclass("predef");
div.appendChild(new Label(conf.getTitle()));
div.addEventListener("onClick", new EventListener(){
public void onEvent(Event event) throws Exception {
loadConfiguration(conf);
}
});
return div;
}
private void loadConfiguration(PivotConfigurator conf) {
System.out.println("PivotDemoBaseController.loadConfiguration()");
_model.clearAllFields(true);
conf.configure(_model);
conf.configure(pivot);
pivot.setPivotRenderer(conf.getRenderer());
styleConfigurator = conf.getCellStyleConfigurator();
initControls();
}
}
SelectorComposer를 확장 내 컨트롤러의 코드3210도움을 주시면 감사하겠습니다.
지금까지 해보신 것은 무엇입니까? comobobox에 대한 onChange 이벤트 처리기가 선택된 값을 인쇄하는 것 외에는 아무 것도하지 않는 것을 볼 수 있습니다. 피봇 테이블을 업데이트하려면 새 모델을 준비하고 setModel() API를 호출하면됩니다. – kachhalimbu
답장을 보내 주셔서 감사합니다 ... NotifyChange ("yourModelObject") 시도했지만 나를 위해 작동하지 않는 것 같습니다. – Gautam
MVC (피벗 팅에서 setModel()) 또는 MVVM (모델을 업데이트하는 메서드에서 NotifyChange 주석)을 사용합니다. NotifyChange로 시도한 것과 "나를 위해 작동하지 않는 것"이 어떤 힌트를주지는 못했습니다. 구체적인 세부 정보를 제공하여 도움을 드리겠습니다. MVVM은 ZK의 초보자 인 경우 약간의 학습 곡선이 있으므로 MVVM으로 변경하는 대신 MVC를 사용하는 위의 코드를 개선하는 것이 좋습니다. – kachhalimbu