-
FEATURED COMPONENTS
First time here? Check out the FAQ!
I'm working on an application where the data needs to ibe default sorted on the 4th column when users first enter the application (from there they can sort on any of the columns at will).
I'm new to this language, and haven't been able to find anything that works browsing from google.
Any help would be appreciated.
Hi Coder,
Try call the sort method of listheader (if you use Listbox) while create,
for example
<listheader ... onCreate="self.sort(true);"/>
References:
Listheader#sort
Column#sort
Regards,
ben
Still not working. I've tried a couple things:
<column label="My Column"
style="columnheader"
sortAscending="${columnAsc}"
sortDescending="${columnDesc}"
onCreate="self.sort(false);" />
and
<column label="My Column"
style="columnheader"
sortAscending="${columnAsc}"
sortDescending="${columnDesc}"
sortDirection="descending"
onCreate="self.sort(false);" />
I've tried both "true" and "false" for the sort parameter. In all cases, the column loads with the descending arrow in the column highlighted, but the values aren't sorted. I've tried the force call (sort(true, true), but that isn't working either
Matthew, I tried inserting that line as you had it into the code for the column I want to sort on and it had no effect. It did not throw any errors, but did continue sorting on the first column. Was there any adjustments I needed to make to it?
Hi Coder,
Here is a simple sample:
package j2nknbfu$v4;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;
}}
package j2nknbfu$v4;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);
}
}
package j2nknbfu$v4;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;
}
}
<zk>
<!-- http://www.zkoss.org/forum/listComment/18064-Auto-sort-on-a-grid-doesn-t-update-after-refresh-of-data?lang=en -->
<div apply="j2nknbfu$v4.TestComposer">
<grid id="inboxGrid" height="350px"
rowRenderer="j2nknbfu$v4.MyRowRenderer"
emptyMessage="Nothing in Inbox.">
<custom-attributes org.zkoss.zul.grid.autoSort="true" />
<columns>
<column label="Subject" />
<column width="150px" label="Received" sort="auto(sender)" onCreate="self.sort(true);"/>
<column width="80px" label="Size" />
</columns>
</grid>
<button label="updated data and refresh" id="refreshBtn" />
</div>
</zk>
Still not working.
My layout is:
<grid id="asdf" model="${asdf} rowRenderer="asdf" height="150px"> <custom-attributes org.zkoss.zul.grid.autoSort="true" /> <columns sizable="true" > <column sortAscending="${asdf}" sortDescending="${asdf}" width ="x%"><label value="asdf asdf " sclass="word-wrap" multiline="true"> </label></column> [the above column definition x10] <column width="x%" label = "asdf" sortAscending="${asdf}" sortDescending="${asdf}" sortDirection="descending" />
Hi Coder,
I have updated the demo. Please check your customComparator.
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);
}}
}
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;
}}
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);
}
}
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;
}
}
<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>
Asked: 2012-01-10 19:03:12 +0800
Seen: 413 times
Last updated: Feb 02 '12