2012-02-15 7 views
1

Я пытаюсь добавить стороне сервера сортировки моей сетки, так что я добавил это:jqgrid Java на стороне сервера подкачки

onPaging : function(which_button) { 
       _$("#myGrid").setGridParam({datatype: "xml"}); 
       _$("#myGrid").trigger('reloadGrid'); 
      } 

и когда-либо я нажал на следующую кнопку Страница она пошла на мой сервер и загрузки сетка снова, поэтому я снова вижу записи с первой страницы. мой вопрос заключается в том, как подключить данные о записях сетки и моем сервере? Есть ли полный пример оповещения на стороне сервера? что еще мне нужно, чтобы перейти на мой сервер, чтобы получить currect записи для следующей страницы? что мне нужно добавить на мою веб-страницу и что на страницу сервера?

Любая помощь будет appritiated,

Thank в заранее.

ответ

1

Пожалуйста, подтвердите, что вы выполняете сортировку на стороне сервера или подкачку на стороне сервера. Из вопроса я понимаю, что вы пытаетесь получить данные следующей страницы с сервера при нажатии кнопки next/prev в сетке. Если ваша цель - просто получить данные подкачки, то ниже логики помогут. Если вас интересует подкачка на стороне сервера + серверная подкачка, для этого необходимо следовать аналогичному подходу.

Логика для подкачки на стороне сервера: Предположим, что у вас есть в общей сложности 1000 записей, которые должны отображаться как 50 записей на странице. Я предполагаю, что вы вытаскиваете только первые 50 записей при отображении записей на первой странице, а затем при нажатии следующей кнопки вы хотите получить следующие 50 записей, которые будут отображаться в сетке из базы данных.

Вам не нужна функция onPaging:. Просто настройка подкачки: true будет достаточно.

Есть следующие переменные в классе Java с геттер и сеттер

// Total pages 
    private Integer total = 0; 
    //get how many rows we want to have into the grid - rowNum attribute in the grid 
    private Integer rows = 0; 
    //Get the requested page. By default grid sets this to 1. 
    private Integer page = 0; 
    // All Record 
    private Integer records = 0; 
    // sorting order ascending or descending 
    private String sord; 
    // get index row - i.e. user click to sort 
    private String sidx; 
/** 
    * @return the total 
    */ 
    public Integer getTotal() { 
     return total; 
    } 

    /** 
    * @param total the total to set 
    */ 
    public void setTotal(Integer total) { 
     this.total = total; 
    } 

    /** 
    * @return the rows 
    */ 
    public Integer getRows() { 
     return rows; 
    } 

    /** 
    * @param rows the rows to set 
    */ 
    public void setRows(Integer rows) { 
     this.rows = rows; 
    } 

    /** 
    * @return the page 
    */ 
    public Integer getPage() { 
     return page; 
    } 

    /** 
    * @param page the page to set 
    */ 
    public void setPage(Integer page) { 
     this.page = page; 
    } 

    /** 
    * @return the records 
    */ 
    public Integer getRecords() { 
     return records; 
    } 

    /** 
    * @param records the records to set 
    */ 
    public void setRecords(Integer records) { 
     this.records = records; 

     if(this.records > 0 && this.rows > 0){ 
      this.total = (int)Math.ceil((double) this.records/(double) this.rows); 
     }else{ 
      this.total = 0; 
     } 
    } 

    /** 
    * @return the sord 
    */ 
    public String getSord() { 
     return sord; 
    } 

    /** 
    * @param sord the sord to set 
    */ 
    public void setSord(String sord) { 
     this.sord = sord; 
    } 

    /** 
    * @return the sidx 
    */ 
    public String getSidx() { 
     return sidx; 
    } 

    /** 
    * @param sidx the sidx to set 
    */ 
    public void setSidx(String sidx) { 
     this.sidx = sidx; 
    } 

После этого то, что вам нужно, некоторые вычисления, чтобы установить поля для сетки, как в найденных записей.

// Предполагая, что у вас всего 1000 записей. Это должно быть установлено динамически. На данный момент он жестко кодируется до 1000.

setRecords(1000); 
// for first time when we have page=0, it should 
// be page =1; 
// If last page is required and if page no crosses total count 
       int displayCount = count/rows; 
       int remainder = count%rows; 
       page = (page<=displayCount?page:count==0?0:remainder==0?displayCount:displayCount+1); 


       int to = (getRows() * getPage()); 
       int from = to - getRows(); 

       if (to > getRecords()) to = getRecords(); 

       if (from > to) { 
        from = 0; 
        page = 1; 
       } 

setTotal((int) Math.ceil((double) getRecords()/(double) getRows())); 

       if(getTotal() == 0) page =0; 
+0

спасибо за ответ! Я дам ему попробовать. как вы поняли, я хочу, чтобы на сервере отображались страницы и сортировка на стороне клиента. следует ли добавлять переменные со стороны сервера в jqrid? или что эти значения автоматически отправляются с jqgrid на серверную сторону, когда я нажимаю кнопку next/prev? еще раз спасибо. – user590586

+0

Так как вы хотите достигнуть серверной подкачки, поэтому для сортировки сетки вам нужно будет вытащить оставшиеся данные с сервера. Следовательно, сортировка на стороне клиента не будет работать. Вам нужно будет использовать предложение dynamic order by в запросе базы данных для сортировки набора результатов для вас. Вы можете использовать что-то вроде этого, если {\t \t \t \t \t \t \t \t \t setOrderByField (sortMap.get (sidx)) (sidx = NULL && sidx.equals ("")!!); \t \t \t \t \t setOrderBy (sord); \t \t \t \t \t \t \t \t} еще { \t \t \t \t \t // Если не выбран ни сортировки, а затем сделать заказ по умолчанию, если таковые имеются. \t \t \t \t \t setOrderByField ("employeeId"); \t \t \t \t \t setOrderBy (desc); \t \t \t \t} – Ani

+0

Вам нужно будет установить файл свойств или статическую карту для сопоставления имени столбца сетки с именем столбца базы данных. А также все переменные, относящиеся к сортировке или разбивке на страницы, по умолчанию присутствуют в сетке, поэтому вам не потребуется указывать их извне в вашей сетке. – Ani

Смежные вопросы