-
FEATURED COMPONENTS
First time here? Check out the FAQ!
1 | initial version | |
Hi Coder, I have updated the demo. Please check your customComparator. ZKFiddle-Link
TestComparator.java
package j2nknbfu$v12;
import java.io.Serializable;
import java.util.Comparator;
public class TestComparator implements Comparator, Serializable {
private boolean asc = true;
private int type = 0;
public TestComparator(boolean asc, int type) {
this.asc = asc;
this.type = type;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public int compare(Object o1, Object o2) {
MyMail myMail1 = (MyMail) o1;
MyMail myMail2 = (MyMail) o2;
switch (type) {
case 1: // Compare Title
return myMail1.getSubject().compareTo(myMail2.getSubject()) * (asc ? 1 : -1);
case 2: // Compare First Name
return myMail1.getSender().compareTo(myMail2.getSender()) * (asc ? 1 : -1);
case 3: // Compare Last Name
return myMail1.getSize().compareTo(myMail2.getSize()) * (asc ? 1 : -1);
default: // Full Name
return myMail1.getSubject().compareTo(myMail2.getSubject()) * (asc ? 1 : -1);
}
}
}
MyMail.java
package j2nknbfu$v12;
public class MyMail {
private String subject;
private String sender;
private Integer size;
public MyMail(String subject, String sender, Integer size) {
this.subject = subject;
this.sender = sender;
this.size = size;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getSender() {
return sender;
}
public void setSender(String sender) {
this.sender = sender;
}
public Integer getSize() {
return size;
}
public void setSize(Integer size) {
this.size = size;
}
}
MyRowRenderer.java
package j2nknbfu$v12;
import org.zkoss.zk.ui.*;
import org.zkoss.zk.ui.event.*;
import org.zkoss.zk.ui.util.*;
import org.zkoss.zk.ui.ext.*;
import org.zkoss.zk.au.*;
import org.zkoss.zk.au.out.*;
import org.zkoss.zul.*;
public class MyRowRenderer implements RowRenderer {
public void render(final Row row, final java.lang.Object data) {
MyMail mail = (MyMail) data;
new Label(mail.getSubject()).setParent(row);
new Label(mail.getSender()).setParent(row);
new Label(mail.getSize().toString()).setParent(row);
}
}
TestComposer.java
package j2nknbfu$v12;
import org.zkoss.zk.ui.*;
import org.zkoss.zk.ui.event.*;
import org.zkoss.zk.ui.util.*;
import org.zkoss.zk.ui.ext.*;
import org.zkoss.zk.au.*;
import org.zkoss.zk.au.out.*;
import org.zkoss.zul.*;
import java.util.*;
public class TestComposer extends GenericForwardComposer{
private Grid inboxGrid;
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
inboxGrid.setModel(new ListModelList(getData()));
}
public void onClick$refreshBtn(Event e){
inboxGrid.setModel(new ListModelList(getUpdatedData()));
}
/* simply return a small model here , you could read data from database for your own implementation.*/
private List<MyMail> getData(){
ArrayList<MyMail> list= new ArrayList<MyMail>();
list.add(new MyMail("Test Mail1","TonyQ", 10));
list.add(new MyMail("Test Mail12","Ryan", 100));
list.add(new MyMail("Test Mail13","Simon", 15));
list.add(new MyMail("Test Mail14","Jimmy", 5));
return list;
}
private List<MyMail> getUpdatedData(){
ArrayList<MyMail> list= new ArrayList<MyMail>();
list.add(new MyMail("Test Mail1-updated","TonyQ", 10));
list.add(new MyMail("Test Mail12-updated","Ryan", 100));
list.add(new MyMail("Test Mail13-updated","Simon", 15));
list.add(new MyMail("Test Mail14-updated","Jimmy", 5));
return list;
}
}
index.zul
<zk>
<!-- http://www.zkoss.org/forum/listComment/18064-Auto-sort-on-a-grid-doesn-t-update-after-refresh-of-data?lang=en -->
<zscript><![CDATA[
Comparator projectAsc = new j2nknbfu$v12.TestComparator(true, 1);
Comparator projectDsc = new j2nknbfu$v12.TestComparator(false, 1);
Comparator senderAsc = new j2nknbfu$v12.TestComparator(true, 2);
Comparator senderDsc = new j2nknbfu$v12.TestComparator(false, 2);
Comparator sizeAsc = new j2nknbfu$v12.TestComparator(true, 3);
Comparator sizeDsc = new j2nknbfu$v12.TestComparator(false, 3);
]]></zscript>
<div apply="j2nknbfu$v12.TestComposer">
<grid id="inboxGrid" height="350px"
rowRenderer="j2nknbfu$v12.MyRowRenderer"
emptyMessage="Nothing in Inbox.">
<columns>
<column label="Subject" sortAscending="${projectAsc}" sortDescending="${projectDsc}" />
<column width="150px" label="Sender" sortAscending="${senderAsc}" sortDescending="${senderDsc}" onCreate="self.sort(true)"/>
<column width="80px" label="Size" sortAscending="${sizeAsc}" sortDescending="${sizeDsc}" />
</columns>
</grid>
<button label="updated data and refresh" id="refreshBtn" />
</div>
</zk>