2011-06-16 14 views
10

Me gustaría ocultar una columna (es una columna de ID que es única para cada fila), pero no puedo eliminarla de la matriz "columnas" porque necesito esos datos en la fila cuando las acciones se realizan en la fila (Selección, clasificación, ect).Posible ocultar una columna SlickGrid SIN eliminarla de la matriz "columnas"?

Después de ordenar, por ejemplo, necesito tomar las filas para que coincidan con los estilos anteriores que tenían, y puedo hacerlo con la columna ID. Necesito los datos en la fila, simplemente no quiero que se muestren.

Gracias.

Respuesta

11

La respuesta es NO, pero que no es la respuesta que busca :)

Aparte de lo que las columnas están mirando para agarrar sus datos, no hay un vínculo físico entre ellos y cuáles son sus elementos de datos se ven me gusta. No es necesario que tenga una columna visible para tener una ID en su elemento de datos.

+0

Lo sentimos, no entiendo completamente lo que está diciendo. ¿Cómo puedo obtener el ID de los datos de la Fila, si esa columna está "oculta" (a.k.a. no en la Fila)? – Kevin

+5

Vincula la cuadrícula a la matriz de datos: var data = [{id: 0, título: 'item1'}, {id: 1, título: 'elemento3'}, ...]; Si decide no mostrar la columna para ID, los datos todavía están allí en el elemento de datos. – Tin

+0

Eres el hombre, ¡gracias por ayudar a un nooby! – Kevin

1

No es posible PERO como una solución puede establecer el ancho/maxWidth en 1, establezca el nombre en una cadena vacía y coloque la columna en el extremo derecho de todas las otras columnas. Al igual que (ejemplo está en CoffeeScript, si se siente seguro del uso de sintaxis http://js2coffee.org/):

columns = [ 

      ... some columns ... 

      { 
       id:"hidden" 
       name:"" 
       field:"id" 
       sortable:"true" 
       width: 1 
       maxWidth: 1 
       minWidth: 1 
       unselectable: true 
       formatter: (row,cell,val,columnDef,dataContext) -> 
        "<div style='display: none;'>#{val}</div>" 
      } 
     ] 
0

Para este tipo de problemas, he utilizado dos matrices. Uno para mostrar y el otro para columnPicker. Aquí está cómo,

var org_columns = [],hid_columns = []; 
org_columns.push(
cb_selector.getColumnDefinition(), 
{id: "id", name: "ID", field: "id", sortable: true, width: 56}, 
{id: "name", name: "Name", field: "name", editor: Slick.Editors.Text, sortable: true, width: 234}, 
{id: "email", name: "Email", field: "email", editor: Slick.Editors.Text, sortable: true, width: 234} 
); 

hid_columns.push(
cb_selector.getColumnDefinition(), 
{id: "name", name: "Name", field: "name", editor: Slick.Editors.Text, sortable: true, width: 234}, 
{id: "email", name: "Email", field: "email", editor: Slick.Editors.Text, sortable: true, width: 234} 
); 
var data_view = new Slick.Data.DataView(); 
grid = new Slick.Grid("#grid", data_view, hid_columns, grid_options); 
var columnPicker= new Slick.Controls.ColumnPicker(org_columns, grid,grid_options); 
6

En caso de que alguien todavía esté buscando esto, he encontrado una manera ... no es masivamente elegante pero funciona. Como sugirió Simon, agregue la columna Id como la última en la grilla. Establece tanto el CssClass y headerCssClass ser "pantalla: ninguno importante" y establecer el ancho, y anchoMin anchoMax opciones de columna a 0 de la siguiente manera:

var columns = [ 
    { id: "MyColumnId", name: "My Column", field: "MyColumnData", width: 100}, 
    { id: "Id", name: "Id", field: "Id", width: 0, minWidth: 0, maxWidth: 0, cssClass: "reallyHidden", headerCssClass: "reallyHidden" } 
]; 

y el css es:

.reallyHidden {display : ninguno! importante;}

Espero que ayude.

+0

Esto es absolutamente correcto. Noté que no necesitaba el CSS, pero también estoy usando gird.autosizeColumns() después de grid.render(). Tal vez eso tiene algo que ver con eso? – jarederaj

+1

Al cambiar el tamaño de la columna, el encabezado y el valor de celda se perderán un poco. – bunjeeb

+0

Para solucionar el problema de redimensionamiento, vaya a applyColumnWidths en slick.grid.js y agregue el siguiente 'if (columnas [i] .minWidth == 0 && columns [i] .maxWidth == 0) {columns [i]. ancho = 0; } ' – phyatt

0

en coloumns.push ({id: id, nombre: nombre, Oculto: true}) // oculta asegura que se elimina la columna mientras que la unión de rejilla

0

Comprendo que esto es una cuestión de edad, sino la correcta La forma de hacerlo es usando un DataProvider y utilizando getItemMetaData para proporcionar información que no necesariamente desea mostrar.

Cuando selecciona su fila puede llamar a grid.getItemMetaData (cell.row) para obtener la información adicional que necesita. Se espera que getItemMetaData devuelva un objeto json que describa los metadatos a nivel de fila y de celda.

Aquí están los documentos que lo describen.

https://github.com/mleibman/SlickGrid/wiki/Providing-data-to-the-grid

Cuestiones relacionadas