Sorting problem in Tables

I've got a very strange problem while sorting table columns in WebDynpro Java.
I followed every step in the tutorial and imported the TableSorter.java into my project. But the columns in my table is still unsortable. I tried every effort but failed to make it sortable. Anyone encountered the same problem with me? Thanks in advance!
PS: I strictly followed the tutorial chapter 11's steps so do not tell me refer to that tutorial.

Hello Sumit,
I've just searched the forum again and found a post answered by Armin Reichert:
"A possible reason might be that you have added table columns using the "GroupedColumns" aggregation (which is default in NW04s) but your TableSorter code still assumes that the columns are in the "Columns" aggregation (was default in NW04)."
The way to resolve this issue is simple as follow:
Replace
for (Iterator it = table.iterateColumns(); it.hasNext(); ++index)
by
for (Iterator it = table.iterateGroupedColumns(); it.hasNext(); ++index)
in your TableSorter.java.
I tried this and it worked! Thank you Sumit.

Similar Messages

  • Sorting Problem in FND_MENU_ENTRIES_TL Table

    Hi,
    FND_MENU_ENTRIES_TL Table storing the record FND_MENU_ENTRIES_TL_N1(MENU_ID,PROMPT,LANGUAGE) wise in R12. But whereas in 11i, records stored FND_MENU_ENTRIES_TL_U1(MENU_ID,ENTRY_SEQUENCE,LANGUAGE).
    I am confused, whether i need to recreate the index in R12, so the records will get store MENU_ID,ENTRY_SEQUENCE,LANGUAGE wise.
    Could any one please suggest me how to resolve this problem.
    Thanks,
    Praba T

    815667 wrote:
    Hi,
    FND_MENU_ENTRIES_TL Table storing the record FND_MENU_ENTRIES_TL_N1(MENU_ID,PROMPT,LANGUAGE) wise in R12. But whereas in 11i, records stored FND_MENU_ENTRIES_TL_U1(MENU_ID,ENTRY_SEQUENCE,LANGUAGE).
    I am confused, whether i need to recreate the index in R12, so the records will get store MENU_ID,ENTRY_SEQUENCE,LANGUAGE wise.
    Could any one please suggest me how to resolve this problem.
    Thanks,
    Praba TPl do not abuse the forums by cross-posting in multiple forums
    Sorting Problem in FND_MENU_ENTRIES_TL Table
    Sorting Problem in FND_MENU_ENTRIES_TL Table
    Your issue is related to EBS, not to database upgrades (which is the topic of this forum)
    Srini

  • Problem with table sorting,

    Hi To All,
    I am having table,I am doing the sorting for this table using sql query order by.
    I have the code when i click on radi button with value="1",it is soring the table by ascending,and if click on the radio button with value="2",
    it is sorting in descending order.
    I want the code like,If i click on the arrow,Sorting should happen.Like if the records are in ascending order arow should be up and if i click on descending order arow should be down.
    can any body give me the idea.
    My code is as follows.
    <table>
    <th>
    <td >TestCase Name
    <select name="<%= TestCasesData.SORT_BY%>0">
    <option value="1" <%= (filterObject.getSortBy1()==1)? "selected":"" %>>TestCase Name</option>
    <input type="radio" name="<%= TestCasesData.RADIO %>0" value="1" <%= (filterObject.getAscDesc1()== 1)? "checked":"" %>>asc
    <input type="radio" name="<%= TestCasesData.RADIO %>0" value="2" <%= (filterObject.getAscDesc1()== 2)? "checked":"" %>>desc
    </td>
    <td>Created by
    <select name="<%= TestCasesData.SORT_BY%>0">
    <option value="1" <%= (filterObject.getSortBy1()==1)? "selected":"" %>>TestCase Name</option>
    <input type="radio" name="<%= TestCasesData.RADIO %>0" value="1" <%= (filterObject.getAscDesc1()== 1)? "checked":"" %>>asc
    <input type="radio" name="<%= TestCasesData.RADIO %>0" value="2" <%= (filterObject.getAscDesc1()== 2)? "checked":"" %>>desc
    </td>
    <td>Created Date
    <select name="<%= TestCasesData.SORT_BY%>0">
    <option value="1" <%= (filterObject.getSortBy1()==1)? "selected":"" %>>TestCase Name</option>
    <input type="radio" name="<%= TestCasesData.RADIO %>0" value="1" <%= (filterObject.getAscDesc1()== 1)? "checked":"" %>>asc
    <input type="radio" name="<%= TestCasesData.RADIO %>0" value="2" <%= (filterObject.getAscDesc1()== 2)? "checked":"" %>>desc
    </td>
    </th>
    <tr><td>--</td></tr>
    <tr><td>--</td></tr>
    <tr><td>--</td></tr>
    </table>

    I am using java
    Query is as follows
    for(int i=0;i<count;i++) {
    if((radio[i] == 1 || radio[i] == 2) && (sortBy[i] != -1)) {
    if(entered) {
    query.append(" order by ");
    entered = false;
    if(sortBy[i] == 1) {
    query.append(" test_case ");
    } else if(sortBy[i] == 2) {
    query.append(" cre_user ");
    } else if(sortBy[i] == 3) {
    query.append(" cre_date ");
    if(radio[i] == 1) {
    query.append(" asc , ");
    } else if(radio[i] == 2){
    query.append(" desc , ");
    query.append(" cre_date desc ");
    and i am getting parameter like as follows
    for(int i=0;i<count;i++) {
    if(request.getParameter(TestCasesData.SORT_BY+i) != null)
    testCasesData.sortBy[i] = Integer.parseInt(request.getParameter(TestCasesData.SORT_BY+i));
    System.out.println(testCasesData.sortBy);
                             if(request.getParameter(TestCasesData.RADIO+i) != null)
    testCasesData.radio[i] = Integer.parseInt(request.getParameter(TestCasesData.RADIO+i));
    and my java bean as follows
    package com.DB.RPT.Calc.TestReport.Web;
    public class FilterObject {
         //     fields available in search_criteria.jsp
         private String testCaseName="";
         private String createUser="";
         private String fromDate="";
         private String toDate="";
         private int sortBy1=1;
         private int sortBy2;
         private int sortBy3;
         private boolean isUserListEnabled;
         private int ascDesc1=1;
         private int ascDesc2;
         private int ascDesc3;
         public FilterObject() {
         public void resetForm() {          
              testCaseName="";
              createUser="";
              fromDate="";
              toDate="";
              sortBy1=1;
              sortBy2=0;
              sortBy3=0;
              isUserListEnabled=false;
              ascDesc1=1;
              ascDesc2=0;
              ascDesc3=0;
         public String getFromDate() {
              return fromDate;
         public void setFromDate(String fromDate) {
              this.fromDate = fromDate;
         public String getTestCaseName() {
              return testCaseName;
         public void setTestCaseName(String testCaseName) {
              this.testCaseName = testCaseName;
         public String getToDate() {
              return toDate;
         public void setToDate(String toDate) {
              this.toDate = toDate;
         public int getAscDesc1() {
              return ascDesc1;
         public void setAscDesc1(int ascDesc1) {
              this.ascDesc1 = ascDesc1;
         public int getAscDesc2() {
              return ascDesc2;
         public void setAscDesc2(int ascDesc2) {
              this.ascDesc2 = ascDesc2;
         public int getAscDesc3() {
              return ascDesc3;
         public void setAscDesc3(int ascDesc3) {
              this.ascDesc3 = ascDesc3;
         public int getSortBy1() {
              return sortBy1;
         public void setSortBy1(int sortBy1) {
              this.sortBy1 = sortBy1;
         public int getSortBy2() {
              return sortBy2;
         public void setSortBy2(int sortBy2) {
              this.sortBy2 = sortBy2;
         public int getSortBy3() {
              return sortBy3;
         public void setSortBy3(int sortBy3) {
              this.sortBy3 = sortBy3;
         public String getCreateUser() {
              return createUser;
         public void setCreateUser(String createUser) {
              this.createUser = createUser;
         public boolean getIsUserListEnabled() {
              return isUserListEnabled;
         public void setIsUserListEnabled(boolean isUserListEnabled) {
              this.isUserListEnabled = isUserListEnabled;
    If you want any clarificaton please ask me

  • Problem with Column Sorting in Request Table View

    We've enabled column sorting on the table view in an Answers request but it doesn't work when more than around 400 rows are returned. It works Ok when fewer than 400 rows are returned. Does anyone know if there is a specific limit to the number of rows where column sorting works?
    Thanks,
    Mike

    I've dug into the query log a little more. When this request returns more than around 400 records and you click on a column heading to sort the table view, the query from the log is not changing to reflect the new sort order. It stays as whatever the default sort order was for the request.
    Column heading sorting on other requests in different subject areas on this same server works fine. I've tested this other request with up to 6400 rows returning and it's sorting works.
    All caching is turned off for the subject area.

  • Problem - Sort output in table (multiple columns)

    Dear all,
    First of all - Best wishes for 2008.
    I probably have an easy matter, but i can't figure it out, and on this forum very little is mentioned about the sort operator, so therefore this new post.
    I have a dashboard with some input fields (dropdown boxes).
    I have a table (as result of query) and this works fine. The table consists of several columns. (so far no rocket science).
    Generally the structure of the table is like:
    IM SBU | App. Request key | App. Request | etc....
    I want the IM SBU colum to be sorted (assending or decending doenst matter).
    But somehow the second column is the one where the data is sorted (standard).
    My guess this happends because its a key value? or its because it starts with an A (and the other with and I).
    So i insert the sort opperator, add an object (IM SBU) and select up. Then from that opperator i create a table.
    This results in a table with just 1 column (IM SBU).
    So i tried several things.
    I tried to sort on the IM SBU key (this gives the same result).
    I added all colums as an object of the sort opperator...but this still gives the same result of just 1 column.
    Any ideas?
    Regards.
    Bart

    Dear all.
    I'm wondering if  anybody else experienced errors with the sort and the amount of columns shown in a table????
    In general i have a query and want a table as output with 8 columns (sorted by 1 object). I figured out the following and will demonstrate it with 4 situations.
    Situation1 (auto fit table without sort)
    In the properties of the table i select 'frame style'= 'Primary frame' and "fit content" = 'auto'. I run the dashboard and the content of the query is good. All columns are shown and the chart width is auto determined.
    Situation 2 (auto fit table with sort)
    I want to sort on 1 object, so from query i insert a sort (select object), and from sort i create table. Then i select 'frame style'= 'Primary frame' and "fit content" = 'auto'. I run the dashboard and the content of the query is NOT good. I just get to see 1 column. But i selected 8 columns.
    Situation 3 (actual fit table with sort)
    I want to sort on 1 object, so from query i insert a sort, and from sort i create table. Then i select 'frame style'= 'Primary frame' and select "fit content" = 'actual size'. I run the dashboard and the content of the query is good (but not what i want). I get to see all 8 columns. But the table is smaller than i want. I doenst auto fit.
    Situation 4 (fit width table with sort)
    I want to sort on 1 object, so from query i insert a sort (select object), and from sort i create table. Then i select 'frame style'= 'Primary frame' and "fit content" = 'fit width'. I run the dashboard and the content of the query is NOT good. I just get to see 1 column (again). But i selected 8 columns.
    Any suggestions?
    Any known work arounds?
    Or is this an error in VC and should i request a note?
    Regards.
    Bart

  • JTable sorting - problem when adding elements (complete code inside)

    I�m writing this email with reference to a recent posting here but this time with the code example. (I apologize for the duplicated posting � this time it will be with the code)
    Problem: when adding more elements to the JTable (sorted) the exception: ArrayIndexOutOfBoundsException is thrown.
    Example: If the elements in the table are 10 and then the user requests for 8 � the table will produce the correct result. However, if the user will ask for 11 items (>10) the exception will be thrown.
    The program: The program below (compiles and running). A JTable is constructed with 3 items, when you click the button - the return result should be 4 items - this will generate the error, WHY?
    I would highly appreciate your thoughts why this is happening and most importantly � how to fix it.
    Thanks a lot
    3 files:
    (1) TableSorterDemo
    (2) Traveler
    (3)TableSorter
    //TableSorterDemo:
    package sorter;
    import javax.swing.DefaultListModel;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.AbstractTableModel;
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    * TableSorterDemo is like TableDemo, except that it
    * inserts a custom model -- a sorter -- between the table
    * and its data model.  It also has column tool tips.
    public class TableSorterDemo implements ActionListener
         private JPanel superPanel;
         private JButton clickMe = new JButton("click me to get diff data");
         private boolean DEBUG = false;
         private DefaultListModel defaultListModel;
         private JTable table;
        public TableSorterDemo()
             superPanel = new JPanel(new BorderLayout());
             defaultListModel = new DefaultListModel();
             init1();
            TableSorter sorter = new TableSorter(new MyTableModel(defaultListModel)); //ADDED THIS     
            table = new JTable(sorter);             //NEW
            sorter.setTableHeader(table.getTableHeader()); //ADDED THIS
            table.setPreferredScrollableViewportSize(new Dimension(500, 70));
            //Set up tool tips for column headers.
            table.getTableHeader().setToolTipText(
                    "Click to specify sorting; Control-Click to specify secondary sorting");
            //Create the scroll pane and add the table to it.
            JScrollPane scrollPane = new JScrollPane(table);
            //Add the scroll pane to this panel.
            superPanel.add("Center", scrollPane);
            superPanel.add("South",clickMe);
            clickMe.addActionListener(this);              
        public JPanel getPanel()
             return superPanel;
        public void init1()
             //in real life this will be done from the db
             Traveler a = new Traveler();
             Traveler b = new Traveler();
             Traveler c = new Traveler();
             a.setFirstName("Elvis");
             a.setLastName("Presley");
             a.setSprot("Ping Pong");
             a.setNumYears(3);
             a.setVegetarian(true);
             b.setFirstName("Elton");
             b.setLastName("John");
             b.setSprot("Soccer");
             b.setNumYears(2);
             b.setVegetarian(true);
             c.setFirstName("shaquille");
             c.setLastName("oneil");
             c.setSprot("Golf");
             c.setNumYears(22);
             c.setVegetarian(true);
             defaultListModel.addElement(a);
             defaultListModel.addElement(b);
             defaultListModel.addElement(c);
        public void init2()
             //in real life this will be done from the db
             Traveler d = new Traveler();
             Traveler e = new Traveler();
             Traveler f = new Traveler();
             Traveler g = new Traveler();
             d.setFirstName("John");
             d.setLastName("Smith");
             d.setSprot("Tennis");
             d.setNumYears(32);
             d.setVegetarian(true);
             e.setFirstName("Ron");
             e.setLastName("Cohen");
             e.setSprot("Baseball");
             e.setNumYears(12);
             e.setVegetarian(true);
             f.setFirstName("Donald");
             f.setLastName("Mac Novice");
             f.setSprot("Vallyball");
             f.setNumYears(1);
             f.setVegetarian(true);
             g.setFirstName("Eithan");
             g.setLastName("Superstar");
             g.setSprot("Vallyball");
             g.setNumYears(21);
             g.setVegetarian(true);
             defaultListModel.addElement(d);
             defaultListModel.addElement(e);
             defaultListModel.addElement(f);
             defaultListModel.addElement(g);            
        class MyTableModel extends AbstractTableModel
             private DefaultListModel myModel;
             public MyTableModel(DefaultListModel m)
                  myModel=m;
            private String[] columnNames = {"First Name",
                                            "Last Name",
                                            "Sport",
                                            "# of Years",
                                            "Vegetarian"};
            public int getColumnCount()
                return columnNames.length;
            public int getRowCount()
                return myModel.size();
            public String getColumnName(int column)
                 return getNames()[column];             
             public String[] getNames()
                  String[] names = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"};
                  return names;
            public Object getValueAt(int row, int col)
                 return distributeObjectsInTable(row, col, (Traveler) myModel.elementAt(row));
            public Object distributeObjectsInTable(int row, int col, Traveler tr)
               switch(col)
                         case 0:
                              return tr.getFirstName();
                         case 1:
                           return tr.getLastName();
                      case 2:
                           return tr.getSprot();
                      case 3:
                           return new Integer(tr.getNumYears());
                      case 4:
                           return new Boolean (tr.isVegetarian());
                     default:
                         return "Error";
            public Class getColumnClass(int c)
                return getValueAt(0, c).getClass();
        private static void createAndShowGUI()
            //Make sure we have nice window decorations.
            JFrame.setDefaultLookAndFeelDecorated(true);
            //Create and set up the window.
            JFrame frame = new JFrame("TableSorterDemo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //Create and set up the content pane.
            TableSorterDemo newContentPane = new TableSorterDemo();
            newContentPane.getPanel().setOpaque(true); //content panes must be opaque
            frame.setContentPane(newContentPane.getPanel());
            //Display the window.
            frame.pack();
            frame.setVisible(true);
        public static void main(String[] args)
            //Schedule a job for the event-dispatching thread:
            //creating and showing this application's GUI.
            javax.swing.SwingUtilities.invokeLater(new Runnable()                   
                public void run()
                    createAndShowGUI();
         public void actionPerformed(ActionEvent ae)
              if (ae.getSource()==clickMe)
                   defaultListModel.removeAllElements();
                   init2(); //if the size of the model was less than 2 items - the result will be ok.
                              //in other words, if you commens the last 2 rows of this method (addElement(f) & g)
                             // the result will be fine.
                   table.updateUI();          
    }//(2) Traveler
    package sorter;
    public class Traveler
         private String firstName;
         private String lastName;
         private String sprot;
         private int numYears;
         private boolean vegetarian;
         public String getFirstName()
              return firstName;
         public String getLastName()
              return lastName;
         public int getNumYears()
              return numYears;
         public String getSprot()
              return sprot;
         public boolean isVegetarian()
              return vegetarian;
         public void setFirstName(String firstName)
              this.firstName = firstName;
         public void setLastName(String lastName)
              this.lastName = lastName;
         public void setNumYears(int numYears)
              this.numYears = numYears;
         public void setSprot(String sprot)
              this.sprot = sprot;
         public void setVegetarian(boolean vegetarian)
              this.vegetarian = vegetarian;
    }//(3)TableSorter
    package sorter;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import java.util.List;
    import javax.swing.*;
    import javax.swing.event.TableModelEvent;
    import javax.swing.event.TableModelListener;
    import javax.swing.table.*;
    public class TableSorter extends AbstractTableModel {
        protected TableModel tableModel;
        public static final int DESCENDING = -1;
        public static final int NOT_SORTED = 0;
        public static final int ASCENDING = 1;
        private static Directive EMPTY_DIRECTIVE = new Directive(-1, NOT_SORTED);
        public static final Comparator COMPARABLE_COMAPRATOR = new Comparator() {
            public int compare(Object o1, Object o2) {
                return ((Comparable) o1).compareTo(o2);
        public static final Comparator LEXICAL_COMPARATOR = new Comparator() {
            public int compare(Object o1, Object o2) {
                return o1.toString().compareTo(o2.toString());
        private Row[] viewToModel;
        private int[] modelToView;
        private JTableHeader tableHeader;
        private MouseListener mouseListener;
        private TableModelListener tableModelListener;
        private Map columnComparators = new HashMap();
        private List sortingColumns = new ArrayList();
        public TableSorter() {
            this.mouseListener = new MouseHandler();
            this.tableModelListener = new TableModelHandler();
        public TableSorter(TableModel tableModel) {
            this();
            setTableModel(tableModel);
        public TableSorter(TableModel tableModel, JTableHeader tableHeader) {
            this();
            setTableHeader(tableHeader);
            setTableModel(tableModel);
        private void clearSortingState() {
            viewToModel = null;
            modelToView = null;
        public TableModel getTableModel() {
            return tableModel;
        public void setTableModel(TableModel tableModel) {
            if (this.tableModel != null) {
                this.tableModel.removeTableModelListener(tableModelListener);
            this.tableModel = tableModel;
            if (this.tableModel != null) {
                this.tableModel.addTableModelListener(tableModelListener);
            clearSortingState();
            fireTableStructureChanged();
        public JTableHeader getTableHeader() {
            return tableHeader;
        public void setTableHeader(JTableHeader tableHeader) {
            if (this.tableHeader != null) {
                this.tableHeader.removeMouseListener(mouseListener);
                TableCellRenderer defaultRenderer = this.tableHeader.getDefaultRenderer();
                if (defaultRenderer instanceof SortableHeaderRenderer) {
                    this.tableHeader.setDefaultRenderer(((SortableHeaderRenderer) defaultRenderer).tableCellRenderer);
            this.tableHeader = tableHeader;
            if (this.tableHeader != null) {
                this.tableHeader.addMouseListener(mouseListener);
                this.tableHeader.setDefaultRenderer(
                        new SortableHeaderRenderer(this.tableHeader.getDefaultRenderer()));
        public boolean isSorting() {
            return sortingColumns.size() != 0;
        private Directive getDirective(int column) {
            for (int i = 0; i < sortingColumns.size(); i++) {
                Directive directive = (Directive)sortingColumns.get(i);
                if (directive.column == column) {
                    return directive;
            return EMPTY_DIRECTIVE;
        public int getSortingStatus(int column) {
            return getDirective(column).direction;
        private void sortingStatusChanged() {
            clearSortingState();
            fireTableDataChanged();
            if (tableHeader != null) {
                tableHeader.repaint();
        public void setSortingStatus(int column, int status) {
            Directive directive = getDirective(column);
            if (directive != EMPTY_DIRECTIVE) {
                sortingColumns.remove(directive);
            if (status != NOT_SORTED) {
                sortingColumns.add(new Directive(column, status));
            sortingStatusChanged();
        protected Icon getHeaderRendererIcon(int column, int size) {
            Directive directive = getDirective(column);
            if (directive == EMPTY_DIRECTIVE) {
                return null;
            return new Arrow(directive.direction == DESCENDING, size, sortingColumns.indexOf(directive));
        private void cancelSorting() {
            sortingColumns.clear();
            sortingStatusChanged();
        public void setColumnComparator(Class type, Comparator comparator) {
            if (comparator == null) {
                columnComparators.remove(type);
            } else {
                columnComparators.put(type, comparator);
        protected Comparator getComparator(int column) {
            Class columnType = tableModel.getColumnClass(column);
            Comparator comparator = (Comparator) columnComparators.get(columnType);
            if (comparator != null) {
                return comparator;
            if (Comparable.class.isAssignableFrom(columnType)) {
                return COMPARABLE_COMAPRATOR;
            return LEXICAL_COMPARATOR;
        private Row[] getViewToModel() {
            if (viewToModel == null) {
                int tableModelRowCount = tableModel.getRowCount();
                viewToModel = new Row[tableModelRowCount];
                for (int row = 0; row < tableModelRowCount; row++) {
                    viewToModel[row] = new Row(row);
                if (isSorting()) {
                    Arrays.sort(viewToModel);
            return viewToModel;
        public int modelIndex(int viewIndex)
            return getViewToModel()[viewIndex].modelIndex;
        private int[] getModelToView()
            if (modelToView == null) {
                int n = getViewToModel().length;
                modelToView = new int[n];
                for (int i = 0; i < n; i++) {
                    modelToView[modelIndex(i)] = i;
            return modelToView;
        // TableModel interface methods
        public int getRowCount() {
            return (tableModel == null) ? 0 : tableModel.getRowCount();
        public int getColumnCount() {
            return (tableModel == null) ? 0 : tableModel.getColumnCount();
        public String getColumnName(int column) {
            return tableModel.getColumnName(column);
        public Class getColumnClass(int column) {
            return tableModel.getColumnClass(column);
        public boolean isCellEditable(int row, int column) {
            return tableModel.isCellEditable(modelIndex(row), column);
        public Object getValueAt(int row, int column) {
            return tableModel.getValueAt(modelIndex(row), column);
        public void setValueAt(Object aValue, int row, int column) {
            tableModel.setValueAt(aValue, modelIndex(row), column);
        // Helper classes
        private class Row implements Comparable {
            private int modelIndex;
            public Row(int index) {
                this.modelIndex = index;
            public int compareTo(Object o) {
                int row1 = modelIndex;
                int row2 = ((Row) o).modelIndex;
                for (Iterator it = sortingColumns.iterator(); it.hasNext();) {
                    Directive directive = (Directive) it.next();
                    int column = directive.column;
                    Object o1 = tableModel.getValueAt(row1, column);
                    Object o2 = tableModel.getValueAt(row2, column);
                    int comparison = 0;
                    // Define null less than everything, except null.
                    if (o1 == null && o2 == null) {
                        comparison = 0;
                    } else if (o1 == null) {
                        comparison = -1;
                    } else if (o2 == null) {
                        comparison = 1;
                    } else {
                        comparison = getComparator(column).compare(o1, o2);
                    if (comparison != 0) {
                        return directive.direction == DESCENDING ? -comparison : comparison;
                return 0;
        private class TableModelHandler implements TableModelListener {
            public void tableChanged(TableModelEvent e) {
                // If we're not sorting by anything, just pass the event along.            
                if (!isSorting()) {
                    clearSortingState();
                    fireTableChanged(e);
                    return;
                // If the table structure has changed, cancel the sorting; the            
                // sorting columns may have been either moved or deleted from            
                // the model.
                if (e.getFirstRow() == TableModelEvent.HEADER_ROW) {
                    cancelSorting();
                    fireTableChanged(e);
                    return;
                // We can map a cell event through to the view without widening            
                // when the following conditions apply:
                // a) all the changes are on one row (e.getFirstRow() == e.getLastRow()) and,
                // b) all the changes are in one column (column != TableModelEvent.ALL_COLUMNS) and,
                // c) we are not sorting on that column (getSortingStatus(column) == NOT_SORTED) and,
                // d) a reverse lookup will not trigger a sort (modelToView != null)
                // Note: INSERT and DELETE events fail this test as they have column == ALL_COLUMNS.
                // The last check, for (modelToView != null) is to see if modelToView
                // is already allocated. If we don't do this check; sorting can become
                // a performance bottleneck for applications where cells 
                // change rapidly in different parts of the table. If cells
                // change alternately in the sorting column and then outside of            
                // it this class can end up re-sorting on alternate cell updates -
                // which can be a performance problem for large tables. The last
                // clause avoids this problem.
                int column = e.getColumn();
                if (e.getFirstRow() == e.getLastRow()
                        && column != TableModelEvent.ALL_COLUMNS
                        && getSortingStatus(column) == NOT_SORTED
                        && modelToView != null) {
                    int viewIndex = getModelToView()[e.getFirstRow()];
                    fireTableChanged(new TableModelEvent(TableSorter.this,
                                                         viewIndex, viewIndex,
                                                         column, e.getType()));
                    return;
                // Something has happened to the data that may have invalidated the row order.
                clearSortingState();
                fireTableDataChanged();
                return;
        private class MouseHandler extends MouseAdapter {
            public void mouseClicked(MouseEvent e) {
                JTableHeader h = (JTableHeader) e.getSource();
                TableColumnModel columnModel = h.getColumnModel();
                int viewColumn = columnModel.getColumnIndexAtX(e.getX());
                int column = columnModel.getColumn(viewColumn).getModelIndex();
                if (column != -1) {
                    int status = getSortingStatus(column);
                    if (!e.isControlDown()) {
                        cancelSorting();
                    // Cycle the sorting states through {NOT_SORTED, ASCENDING, DESCENDING} or
                    // {NOT_SORTED, DESCENDING, ASCENDING} depending on whether shift is pressed.
                    status = status + (e.isShiftDown() ? -1 : 1);
                    status = (status + 4) % 3 - 1; // signed mod, returning {-1, 0, 1}
                    setSortingStatus(column, status);
        private static class Arrow implements Icon {
            private boolean descending;
            private int size;
            private int priority;
            public Arrow(boolean descending, int size, int priority) {
                this.descending = descending;
                this.size = size;
                this.priority = priority;
            public void paintIcon(Component c, Graphics g, int x, int y) {
                Color color = c == null ? Color.GRAY : c.getBackground();            
                // In a compound sort, make each succesive triangle 20%
                // smaller than the previous one.
                int dx = (int)(size/2*Math.pow(0.8, priority));
                int dy = descending ? dx : -dx;
                // Align icon (roughly) with font baseline.
                y = y + 5*size/6 + (descending ? -dy : 0);
                int shift = descending ? 1 : -1;
                g.translate(x, y);
                // Right diagonal.
                g.setColor(color.darker());
                g.drawLine(dx / 2, dy, 0, 0);
                g.drawLine(dx / 2, dy + shift, 0, shift);
                // Left diagonal.
                g.setColor(color.brighter());
                g.drawLine(dx / 2, dy, dx, 0);
                g.drawLine(dx / 2, dy + shift, dx, shift);
                // Horizontal line.
                if (descending) {
                    g.setColor(color.darker().darker());
                } else {
                    g.setColor(color.brighter().brighter());
                g.drawLine(dx, 0, 0, 0);
                g.setColor(color);
                g.translate(-x, -y);
            public int getIconWidth() {
                return size;
            public int getIconHeight() {
                return size;
        private class SortableHeaderRenderer implements TableCellRenderer {
            private TableCellRenderer tableCellRenderer;
            public SortableHeaderRenderer(TableCellRenderer tableCellRenderer) {
                this.tableCellRenderer = tableCellRenderer;
            public Component getTableCellRendererComponent(JTable table,
                                                           Object value,
                                                           boolean isSelected,
                                                           boolean hasFocus,
                                                           int row,
                                                           int column) {
                Component c = tableCellRenderer.getTableCellRendererComponent(table,
                        value, isSelected, hasFocus, row, column);
                if (c instanceof JLabel) {
                    JLabel l = (JLabel) c;
                    l.setHorizontalTextPosition(JLabel.LEFT);
                    int modelColumn = table.convertColumnIndexToModel(column);
                    l.setIcon(getHeaderRendererIcon(modelColumn, l.getFont().getSize()));
                return c;
        private static class Directive {
            private int column;
            private int direction;
            public Directive(int column, int direction) {
                this.column = column;
                this.direction = direction;
    }

    The table listens to the TableModel for changes. Changing the table by adding/removing
    rows or columns has no affect on its table model. If you make changes to the table model
    the table will be notified by its TableModelListener and change its view. So tell
    MyTableModel about the change of data:
    public class TableSorterDemo implements ActionListener
        MyTableModel tableModel;
        public TableSorterDemo()
            defaultListModel = new DefaultListModel();
            init1();
            tableModel = new MyTableModel(defaultListModel);
            TableSorter sorter = new TableSorter(tableModel);
        public void actionPerformed(ActionEvent ae)
            if (ae.getSource()==clickMe)
                defaultListModel.removeAllElements();
                init2();
                tableModel.fireTableStructureChanged();
    }

  • Sort the internal table based on the vendor field

    hello experts,
    I am stuck with a small problem...
    I am uploading the data for partner association for vendors through lsmw BI program.
    I am collecting all the records in the end of trasaction and downloading all those records on to the apps server.
    I declared one internal table as
    TYPES: BEGIN OF type_erecord,
            mesg(1000) TYPE c,
            END OF type_erecord.
    DATA: t_precord type standard table of type_erecord initial size 0,
                w_precord type type_erecord.
    I am concatenating all the fields and moving to the internal table..
    concatenate zvendor_master-source  zvendor_master-lifnr  blf00-lifnr                   
                      zvendor_master-lname    zvendor_master-parvw
                      zvendor_master-psource  zvendor_master-pname
                      zvendor_master-lifn2        bwyt3-lifn2
                      zvendor_master-ekorg      zvendor_master-werks   
                      w_PLANT-muplant           zvendor_master-defpa
                      v_message
          into w_precord-mesg separated by c_pipe.
          append w_precord to t_precord.
    now at the end I have to sort this internal table t_precord based on blf00-lifnr
    can any one guide me how to do it
    Thanks for your anticipation
    Nitesha

    OK...
    Than you can create one more table and do the process of sorting and than put data into the final table.
    TYPES: BEGIN OF type_erecord,
    mesg(1000) TYPE c,
    END OF type_erecord.
    DATA: t_precord type standard table of type_erecord initial size 0,
    w_precord type type_erecord.
    TYPES: BEGIN OF type_erecord_1,
    mesg(1000) TYPE c,
    lifnr type blf00-lifnr ,  "<<<
    END OF type_erecord_1.
    DATA: t_precord_1 type standard table of type_erecord initial size 0,
    w_precord_1 type type_erecord.
    I am concatenating all the fields and moving to the internal table..
    concatenate zvendor_master-source zvendor_master-lifnr blf00-lifnr
    zvendor_master-lname zvendor_master-parvw
    zvendor_master-psource zvendor_master-pname
    zvendor_master-lifn2 bwyt3-lifn2
    zvendor_master-ekorg zvendor_master-werks
    w_PLANT-muplant zvendor_master-defpa
    v_message
    into w_precord_1-mesg separated by c_pipe.
    w_precord_1-lifnr = blf00-lifnr .  " <<<
    append w_precord_1 to t_precord_1.   " <<<
    SORT T_PRECORD_1 by LIFNR.  " <<
    LOOP AT T_PRECORD_1 into w_precord_1.
      move-corresponing w_precord_1 to w_precord.
      append w_precord to T_PRECORD.
      clear  w_precord .
    endloop.
    Regards,
    Naimesh Patel

  • ADF Faces: columns sort problem

    Hi all,
    I'm new ADF Faces italian user and I have some problem sorting columns of table component...
    I have tried to convert my ResultSet in a List, and the data are correctly inserted in the "af:table" but the column sort don't work...
    I have already read the "af:table" Oracle specification but I have not just found a solution...
    This is the part of my backing bean that return the List:
    private List anagsList;
    public List getAnagsList()
    Connection connection;
    Statement statement;
    ResultSet resultset;
    try
    Class.forName("oracle.jdbc.driver.OracleDriver");
    connection = DriverManager.getConnection("jdbc:oracle:thin:@192.168.168.75:1521:ORA1", "EL2DEMO", "admin");
    statement = connection.createStatement();
    if(inputText1.getValue().toString().equals(""))
    resultset = statement.executeQuery("SELECT AN_RAGSOC, AN_NOME, AN_DATANASCITA FROM ANAGS");
    else
    String query="SELECT AN_RAGSOC, AN_NOME, AN_DATANASCITA FROM ANAGS WHERE ";
    query=query + "AN_RAGSOC LIKE '%" + inputText1.getValue() + "%' OR ";
    query=query + "AN_NOME LIKE '%" + inputText1.getValue() + "%' OR ";
    query=query + "AN_DATANASCITA LIKE '%" + inputText1.getValue() + "%'";
    resultset=statement.executeQuery(query);
    anagsList = new ArrayList();
    while(resultset.next())
    anagsList.add(new AnagsRecord(resultset.getString(2), resultset.getString(1), resultset.getString(3)));
    resultset.close();
    statement.close();
    connection.close();
    catch(Exception e)
    System.out.println(e);
    return anagsList;
    This is my AnagsRecord class:
    package mypackage.backing;
    public class AnagsRecord
    private String nome;
    private String cognome;
    private String dataNascita;
    public AnagsRecord(String nome, String cognome, String dataNascita)
    setNome(nome);
    setCognome(cognome);
    setDataNascita(dataNascita);
    public String getNome()
    return nome;
    public void setNome(String nome)
    this.nome = nome;
    public String getCognome()
    return cognome;
    public void setCognome(String cognome)
    this.cognome = cognome;
    public String getDataNascita()
    return dataNascita;
    public void setDataNascita(String dataNascita)
    this.dataNascita = dataNascita;
    And this is table component:
    <af:table var="al" emptyText="No records found."
    rows="20" value="#{backing_ADFFaces.anagsList}"
    banding="row" bandingInterval="1">
    <af:column sortable="true" sortProperty="dataNascita">
    <f:facet name="header">
    <af:outputText value="DATA NASCITA"/>
    </f:facet>
    <af:outputText value="#{al.dataNascita}"/>
    </af:column>
    <af:column sortable="true" sortProperty="cognome">
    <f:facet name="header">
    <af:outputText value="COGNOME"/>
    </f:facet>
    <af:outputText value="#{al.cognome}"/>
    </af:column>
    <af:column sortable="true" sortProperty="nome">
    <f:facet name="header">
    <af:outputText value="NOME"/>
    </f:facet>
    <af:outputText value="#{al.nome}"/>
    </af:column>
    </af:table>
    I have already installed the ADF Faces demos (column_sortable.jspx) and it works well, but the backing bean is not very understandable...
    please help me...
    ciao!

    Hi,
    I have the same problem (with another language), national characters are not sorted properly.
    Any pointers how to solve this?
    Regards,
    Patrik

  • Problem with table formatting

    I'm having a lot of problems with tables not reflecting their formatting when I open them in a browser. I've tried opening in Safari, Firefox & Camino with the same results. For example, a row with the following html content has a much larger height & aligns the text to the top when opened in a browser:
    <tr>
              <td height="15" colspan="3" valign="middle"><h6 align="center">Summer 2009</h6>
              </td>
            </tr>
    If it matters, this is a row in a table nested in another table. Here's the code down to the row in question (all tags are closed properly in the remaining code):
    <table width="600" border="2" align="center" cellpadding="0" cellspacing="0">
        <tr>
          <td align="center" valign="top"><img src="images/events.jpg" width="250" height="35"></td>
        </tr>
        <tr>
          <td align="left" valign="top">
          <table width="100%" border="0" align="center" cellpadding="1" cellspacing="0">
            <tr>
              <td height="15" colspan="3" valign="middle"><h6 align="center">Summer 2009</h6>
              </td>
            </tr>
    I am using a style sheet for text. Here's the code for "h6" if that matters:
    h6 {
    font-family: Verdana, Geneva, Arial;
    font-size: 14px;
    font-weight: bold;
    color: #660099;
    Any ideas is appreciated. This is driving me nuts. Spacing and alignment sometimes work and sometimes don't work. Dreamweaver is supposed to make such things easier!
    Kevin

    Header tags are usually used round a bit of text, not parts of a table, and if you don't specify the margins on them, can force different amounts of space below in different browsers. Try making the bottom margin on h6 zero, and confine it to text within a cell.
    Also, if you can upload your page somewhere and let us have the url it will be easier to troubleshoot.

  • Problem in Table maintenance view

    Hi all,
    i am getting some problem in table maintenance view.
    In my table i have some fields and when i created my table maintenance view , it is created , but when i try  to see it in SM30 its not showing my fields and even i am unable to create a  new entry. when i click
    new entries its going back to the sm30 screen..
    How to go abt it
    please help me

    Hello,
    Have you created the table maintanence view the right way.
    You can get good help from below link: [[http://www.****************/Tutorials/ABAP/TableMaintenance/demo.htm]]
    Also, please check the Delivery Class and Data Browser/Table View Maint. in the Delivery and Maintanence tab of the table.
    Thanks,
    Jayant
    Edited by: Jayant Sahu on Nov 24, 2008 3:00 PM

  • How do you sort the entire table in numbers with OSX Maverick?

    Before the upgrade of Numbers 3.0 & Maverick, you use to sort the enire table by (1) Highlighting the entire table, (2) using the drop down arrow in the columns, (3) select the option to set your sort requirements.
    Now, I am not able to find a way to do this.
    Please help!

    Frederick -
    Thanks for the idea, however, I'm trying to Reoganize my entire table.  I'm afraid it is a very convient function that has been removed. 
    Sad to think that the ones designing these programs, don't actually use them.
    ~K~

  • Problem with tables -- need help!

    I am having problems with table formatting, when using
    Preformatted text. The tables look fine in the WYSIWYG editor, but
    have lots of extra space above and below the text when looking at
    the output files.
    I will attach the code from one of the HTML files from my
    project, so you can see what I'm talking about.
    Thanks.

    Well, if you're talking about the single-celled table with
    the line:
    <p class=Preformatted>[assembly:
    Ace.AceAssembly]</p>
    </pre>
    ... you can eliminate the <P> tags. that will give you
    one line less. Otherwise, your remaining space is the result of the
    <PRE> tag. It, like the <XMP> tag, gives it one line of
    space beneath as well.
    Your alternative beyond that would be to, when needed, wrap
    up the script in Javascript. That line, for instance, wouldn't need
    it.

  • Sorting problems in Grid View

    Hi, I'm having a bit of a sorting problem when it comes to an artist with name variations. The example I'm going to use is DJ Tiesto.
    There are album I have where he is credited as DJ Tiesto, and others where he is simply Tiesto.
    In the end, I'd like these albums sorted chronologically under one name (say DJ Tiesto), while still preserving and showing the proper artist name for each album. I have it set to sort by "Album by Year", which is working fine.
    The major problem I am having is that I can't get it to display properly across all iTunes viewing methods: List mode, Grid mode, and Coverflow.
    I've tried leaving the Artist field alone, and changing the Sort Artist field to "DJ Tiesto" for all songs, and that almost works:
    -List mode groups them all under "DJ Tiesto", while showing each albums Artist as the correct artist name.
    -Grid mode sorted by Album groups them all under "DJ Tiesto", while showing each albums Artist as the correct artist name.
    -Coverflow sorts them all in chronological order, while showing each albums Artist as the correct artist name.
    Problem is, Grid mode sorted by ARTIST creates two separate artists! Some for DJ Tiesto and some for Tiesto!
    To correct this I tried changing the Album Artist field for all songs to "DJ Tiesto", which solved that problem but created a bunch of new ones:
    -List mode is still correctly grouping them under "DJ Tiesto", while showing each albums Artist as the correct artist name.
    -Grid mode sorted by Album is still correctly grouping them under "DJ Tiesto", *however now it is not displaying the correct Artist name for each album!*
    -Grid mode sorted by Artist is now grouping them all under "DJ Tiesto", *however it is not displaying the correct Artist name for each album!*
    -Coverflow is sorting them in correct chronological order, *however it as well is not displaying the correct Artist name for each album!*
    Using the Album Artist tag has created more problems that it has solved! Is there anyone who knows a way to achieve what I am trying to do? I have tried seemingly every option I can and have still not found a way to do this!!
    Thanks!

    My own method of working involves renaming the files upon import to:
    i "shotdate_sequencenumber"
    Files are therefore typically named
    b 2007-11-25_001
    etc.
    This way, sorting by Filename automatically sorts by Date by default. And it wouldn't even matter if you added a descriptive text in between the date and number (
    b 2007-11-25_Scotland_001

  • How to sort an internal table with a header line?

    hi all,
    i have declared table i_bseg type standard table of bseg with header line.
    now i have populated data in i_bseg.
    now i am sorting it by bukrs
    ie i am writing sort i_bseg by bukrs.
    before sorting all i_bseg-belnrs were populated...
    but after sorting the contents of  the i_bseg is changing.
    some of the belnrs are getting deleted..
    is there any special way to sort an internal table with header line...?

    hi,
    <b>SORT <itab> [ASCENDING|DESCENDING] [AS TEXT] [STABLE].</b>
    The statement sorts the internal table <itab> in ascending order by its key.<b> The statement always applies to the table itself, not to the header line</b>.
    If you have an internal table with a structured line type that you want sort by a different key, you can specify the key in the SORT statement:
    SORT <itab> [ASCENDING|DESCENDING] [AS TEXT] [STABLE]
                 BY <f1> [ASCENDING|DESCENDING] [AS TEXT]
                    <fn> [ASCENDING|DESCENDING] [AS TEXT].
    <b>this is your sort statement:  sort i_bseg by bukrs.
    you try with this statement:  sort i_bseg by bukrs STABLE.</b>
    regards,
    Ashokreddy

  • What could be the problem with table REGUH

    Hi exprts
    i developed a report . its wrking ok in developemt system
    but in Quality system ,
    the below query is taking more time.
    in quality even  i have taken slection criteria which is very less than devlopment selection.
    please tell me the below query is performance wise not good or
    is there any problem with table REGUH in quality system?
      IF NOT ( t_bsak_aux[] IS INITIAL ).
        SELECT laufd laufi xvorl zbukr lifnr rwbtr kunnr empfg"
               vblnr ausfd rzawe
          FROM reguh
          INTO TABLE t_reguh
          FOR ALL ENTRIES IN t_bsak_aux
          WHERE laufd <> space
            AND laufi <> space
            AND zbukr = t_bsak_aux-bukrs
            AND lifnr = t_bsak_aux-lifnr
            AND vblnr = t_bsak_aux-augbl.
    thanks in advance
    regards
    neeru

    Hi,
    Using SPACE against the keys (LAUFI, LAUFD - specifically LAUFD) will most likely return no results. LAUFD, being one of the keys and the date which the program is supposed to run (considering that this is settlement data - it has already run) - implies that this field will be populated.  Putting " = SPACE" in your where clause is saying that you want to find records from the table where those fields are not populated.  That is fine for LAUFI, considering it is the indicator for a proposal only. In my requirement, my client did not want to see proposals but only real payment runs - therefore, LAUFI = SPACE is correct. 
    The reason you are having poor performance while selecting form this table is because it is a cluster table like bseg.  This thread explains a little bit of why cluster tables are a performance nightmare when trying to select - although it is about bseg, you will get the idea:
    http://blogs.ittoolbox.com/sap/db2/archives/select-from-bsegrfblg-performance-problem-14247
    I'm trying to find an alternative to get bank account information regarding payments - I will post a reply if I am lucky to find one! 
    Good luck

Maybe you are looking for