2013-06-29 3 views
12

Ho una griglia di kendo nella mia pagina che ha alcune colonne. Ora voglio aggiungere una colonna che mostri il numero di riga. Come faccio questo? Grazie.Come aggiungere il numero di riga alla griglia di kendo ui?

+0

Mostra la tua Razor markup pls – YD1m

+1

[Questo] (http://stackoverflow.com/questions/21112330/how-can-i-have-row-number -in-kendo-ui-grid/34609105 # 34609105) la risposta è buona anche se si utilizza la griglia impaginata. –

risposta

22

inizializzare una variabile e mostrarlo in colonna come template: "#= ++record #"

Working Demo

Qui è il codice:

var record = 0; 

$("#grid").kendoGrid({ 
    dataSource: { 
    data: [{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" },{ foo: "foo" }, { foo: "foo" }, { foo : "foo1" }], 
    pageSize: 10 
    }, 
    sortable: true, 
    columns: [ { 
    title: " ", 
    template: "#= ++record #", 
    width: 30 
    }, { field: "foo" }], 
    pageable: true, 
    dataBinding: function() { 
    record = (this.dataSource.page() -1) * this.dataSource.pageSize(); 
    } 
}); 
+4

Nota: la variabile 'record' deve essere definita come variabile globale (finestra). Se questo codice js viene scritto in ambito globale, nessun problema. Ma se stai scrivendo questo codice in una funzione, dovresti cambiare 'var record = 0' in' window.record = 0', o otterrai un'eccezione. –

+0

come aggiungere lo stesso nella vista del rasoio @ html.kendo(). Gri() .... –

+0

Cosa succede se una riga viene cancellata? – Satyadev

3

Per asp.net mvc involucro si dovrebbe usare qualcosa di simile:

@{ 
    var counter = 1; 
} 

@(Html.Kendo().Grid<Types>() 
    .Name("grid") 
    .Columns(columns => 
    {   
     // Define a template column with row counter 
     columns.Template(@<text>@counter++</text>);  

     // Define a columns from your data set and set a column setting 
     columns.Bound(type => type.id);  

     columns.Bound(type=> type.name).Title("Name");  
     // add more columns here   
    }) 
) 
+1

Questo codice apparentemente corretto. Ma non ha funzionato per me. Quando uso "Columns.Template (@" EVERTYTHINGS ");", questo non è nulla nella griglia. – Tavousi

+0

Perché? Hai errori? – YD1m

+0

La mia pagina non ha errori. Ma la colonna non ha dati. – Tavousi

4

Il modello di YD1m non ha funzionato per me ed è la variabile come a string. Così ho dovuto implementare in questo modo:

columns.Template(@<text>@((long)counter++)</text>) 
7

Per rasoio è anche bisogno di mostrare in realtà il numero anche: (non thingies punto abbastanza di commentare)

sopra la griglia:

@{int counter = 1;} 

definizioni di colonna interna:

columns.Template(@<text> 
     <span>@counter @{ counter++; }</span> 
     </text>).Title("#"); 
+0

compagno insanguinato brillante. – nocarrier

+0

la stessa cosa non funziona per me qui è il mio codice @ {contatore int = 1;} columns.Template (@ @Counter @ {contatore ++;} ) .title ("S.no") ; –

+0

Questo non funziona per le griglie legate al server – EthR

5

non v'è alcuna necessità di definire qualsiasi variabile, è possibile ottenere aiuto dall'evento databound:

$("#grid").kendoGrid({ 
    sortable: true, 
    dataSource: [{ 
     name: "Jane Doe", 
     age: 30 
    }, { 
     name: "John Doe", 
     age: 33 
    }], 
    columns: [{ 
     field: "name" 
    }, { 
     field: "age" 
    }, { 
     field: "rowNumber", 
     title: "Row number", 
     template: "<span class='row-number'></span>" 
    }], 
    dataBound: function() { 
     var rows = this.items(); 
     $(rows).each(function() { 
      var index = $(this).index() + 1 
      + ($("#grid").data("kendoGrid").dataSource.pageSize() * ($("#grid").data("kendoGrid").dataSource.page() - 1));; 
      var rowLabel = $(this).find(".row-number"); 
      $(rowLabel).html(index); 
     }); 
    } 
}); 
0

Basato sul grande risposta di Ehsan Mirsaeedi, mi si avvicinò con questa versione, che assegna gli indici a partire da 0 invece di numeri di riga a partire da 1, salta intestazioni di gruppo se la griglia è raggruppato e maniglie il caso in cui la griglia non è paginata.

Avevo bisogno di questi indici per aggiungere un modello con un input nascosto a ciascuna colonna, in modo da poter quindi inviare i valori della griglia insieme all'intero modulo.

Penso che sia correlato abbastanza e vale la pena aggiungere alla discussione ...

Codice:

var theGrid = $("#grid").data("kendoGrid"); 
var rows = this.items().filter(function (index, item) { 
    return $(item).hasClass("k-grouping-row") == false; 
}); 

$(rows).each(function() { 
    var index = $(this).index(); 

    //prevent group header rows from incrementing index 
    if (theGrid.dataSource.options.group != null && theGrid.dataSource.options.group.length > 0) 
     index -= $(this).prevAll("#grid tr.k-grouping-row").length; 

    //adjust indices for current page 
    if (theGrid.options.pageable == true) 
     index += theGrid.dataSource.pageSize() * (theGrid.dataSource.page() - 1); 

    //add the value to the grid's data object 
    theGrid.dataItem(this).rowNumber = index; 

    //and update the grid's HTML 
    var rowLabel = $(this).find(".row-number"); 
    $(rowLabel).html(index); 
}); 

Risultato:
Zero-based row number skipping group headers

0

Se è necessario, il numero di riga nella griglia modificabile

$(document).ready(function(){ 
 
     $("#grid").kendoGrid({ 
 
     dataSource: { 
 
      data: null, 
 
      schema: { 
 
       model: { 
 
        id: "register_No", 
 
        fields: { 
 
         register_No: {editable: true}, 
 
         myEditableField: {editable: true}, 
 
        } 
 
       } 
 
      } 
 

 
     }, 
 
     edit:function(e){ 
 
      var fields= $('input[name="register_No"]'); 
 
      fields.attr('disabled', true); 
 
      fields.removeClass('k-input k-textbox'); 
 
      fields.addClass('none'); 
 
//create this class and set border and background none 
 
      $('input[name="myEditableField"]').focus(); 
 
     }, 
 
     save:function(e){ 
 
      var total=e.sender.dataSource.data().length; 
 
      if(e.model.register_No==""){ 
 
       e.model.register_No=total; 
 
      } 
 

 
     }, 
 
     remove:function(e){ 
 
      var grid = $("#grid").data("kendoGrid"); 
 
      var todos=grid.dataSource.data(); 
 
      var id_actual=e.model.register_No; 
 
      var count=1; 
 
      for(var i=0;i<todos.length;i++){ 
 
       if(todos[i].register_No!==id_actual){ 
 
        var data = grid.dataSource.at(i); 
 
        data.set("register_No", count); 
 
        count++; 
 

 
       } 
 
      } 
 
     } 
 
     , height: 280, 
 
     toolbar: ["create"], 
 
     scrollable: true, 
 
     editable: {mode:"inline", createAt: "bottom",  confirmation: true 
 
     } 
 
     , 
 
     columns: [ 
 
      {field: "register_No",title: "No", width: 30}, 
 
      {field: "myEditableField", title: "Any Field", width: 120}, 
 
      {field: "options", command: ["edit", "destroy"], width: 200} 
 

 
     ] 
 
    }); 
 
     });
<div id="grid"></div>