Foros del Web » Programación para mayores de 30 ;) » .NET »

datagrid a partir de la eleccion de las columnas por el cliente

Estas en el tema de datagrid a partir de la eleccion de las columnas por el cliente en el foro de .NET en Foros del Web. Jose,yo separaria la parte que antes me has cometnado de encriptar la url eso lo dejo pa cuando me meta con la seguridad que ya ...
  #1 (permalink)  
Antiguo 10/05/2005, 09:53
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 3 meses
Puntos: 1
datagrid a partir de la eleccion de las columnas por el cliente

Jose,yo separaria la parte que antes me has cometnado de encriptar la url eso lo dejo pa cuando me meta con la seguridad que ya casi estoy acabando con los listados,luego me emtere con mailimg,y luego con la seguridad y por utlimo dejarlo bonito.

El tema que me toca ahora es:

necesito hace run datagrid dinamico en el que el cliente en una pagina elija las columans,los filtros por columnas y too lo que se peuda lelgar a hacer lo maximos flexible posible.... ya te imaginas...
una vez elegido esto va a otra pagina y que s elo muestr en el datagrid,
el tema es que la asignacion de las columans no debe ser automatica d ela consulta q le paso por que tengo que defenir boundcolumns y por ejemplo algunas d elas columans que puede elegir tienen codigo javascript....
Mi idea era definir el datagrisd como si fueran a llegar todas las columnas.Pero con scriptles (>% %) entre medio del html que dependiendo de que columans vengan con ifs muestre unas columnas u otras en el html pero me ha dao error en los scriptles que estaban debajo del asp:datagrid
Luego probe a pasarlo,como se ahce normalmente en jsp desde otra pagina o desde un usebean,pues traerlo a traves la url y con un response.write mostrarlo en el html pero me da ese error q asusta un poco.
Tb probe a en el html hacer un scriptle grande en el que segun las columnas que me llegan ,que capturo d ela url,ir costruyendo el datagris en un string para luego mostrarlo,pero como esto se hace a traves de scriptles y tenia que meter container.dataitem que estan dentro de estiquetas pos tenia tb problemas al cerrarse estas etiquetas igual que el scriptle

Cual puede ser la mejor parte para hacer esto?????????
Espero haberme esplicao bien
  #2 (permalink)  
Antiguo 10/05/2005, 10:19
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
No se si te valdrá, pero ¿Porque no construyes la SQL que traerá el DataGrid (el que se va a mostrar, no todo) en la página de selección a partir de los datos, y luego la pasas en una variable de session, como un string y construyes el datagrid ya en su página guay??

Sabes lo que te quiero decir??
  #3 (permalink)  
Antiguo 11/05/2005, 01:16
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 3 meses
Puntos: 1
La sql esta construida sin problemas en la pagina de seleccion,y mi primera idea era construir el datagris en su propia pagina.

LA cosa es que no kiero que las columnas se creen automaticamente,por que kiero que tengan unas caracteristicas.

Como ahgo esto???
Hay alguna manera definirle las columnas enlazadas dianmicamente desde la misma pagina???
  #4 (permalink)  
Antiguo 11/05/2005, 01:28
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 3 meses
Puntos: 1
Si sabes de alguna url con algun ejemplo hecho y me la puedes poner agradeceria,asi me busco yo un poco la vida y si tengo preguntas mas concretas ya las hare....
  #5 (permalink)  
Antiguo 11/05/2005, 01:51
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
ahhhhhhh, es que yo datagrids no uso, siempre uso repeaters, no se porque pero bueno, bueno si, porque creo que pesa más el datagrid, pero es cuestión de gustos. Bueno el caso es no conozco ninguna página.

Con lo de las columnas supongo que te refieres a que dependiendo de la selección el datagrid tendrá una u otras columnas. Ummmmmmm, nu sep, nu sep, ¿como cargas el datagrid? con datareader??
  #6 (permalink)  
Antiguo 11/05/2005, 02:00
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 3 meses
Puntos: 1
Te esplico en 0,3 lo que kiero hacer
LA asignacion la hago con dataview.
Hay una opcion del datagrid que las columans se te creen automaticamente y se crearian con la asignacion.
A mi lo que me inetera es que no,es definir yo tb las columans a parte de la consulta.
Yo se que columnas son por que aparte de pasarle la consulta tb tengo las columanas.
Por ejemplo; hay una columna que es pagado,esta es la dichosa columna akella que esa un checkbox,que tiene definido el onclick="javascript:add..."
Yo esta columna que se que html tiene,como se la puede añadir al datagrid si veo que esa columna la ha elegido el cliente.
espero haberme esplicado bien ahora
  #7 (permalink)  
Antiguo 11/05/2005, 02:24
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Hombre, pues bajo opinion (con escasos conocimientos como he dicho del datagrid), podrías utilizar el evento itemdatabound del datagrid (que si supongo que es como el del repeater), y hay defines las columnas que quieres, las agregas a una fila y metes la fila.
  #8 (permalink)  
Antiguo 11/05/2005, 03:19
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 3 meses
Puntos: 1
El evento ItemDataBound se provoca después del enlace de datos de un elemento al control DataGrid. Este evento proporciona la última oportunidad de acceso al elemento de datos antes de que se muestre en el cliente. Una vez provocado el evento, el elemento de datos se anula y deja de estar disponible.

Esto es lo que viene sobre el evento ItemDataBound en msdn ...

El evento se provoca despues del enlace de datos.
Al enlace d edatos que se refiere es datagrid.databind????
Bueno,suponiendo esto,en ese instante se ejecutaria el metodo .
Como añado una columna al datagrid desde un metodo del servidor?
He buscao por msdn pero solo he encontrao lo tipico de enlazar manualmente con el generador d epropiedades,sigo buscando mas informacion.
  #9 (permalink)  
Antiguo 11/05/2005, 03:43
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Yo con los repeaters por ejemplo hago lo siguiente:

repeater1.DataSource= myDataReader
repeater1.DataBind() 'Aquí es donde va al evento databound

y luego en el databound creo una fila y con las celdas que quiera, a partir del

DataBinder.Eval(e.Item.DataItem, "campo")

Entonces para un DataGrid no se exactamente como sería, pero supongo, que en vez de una fila sería un datagriditem o algo así, no se, sería cuestión de investigar
  #10 (permalink)  
Antiguo 11/05/2005, 04:23
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 3 meses
Puntos: 1
Lo del evento esta claro.

Lo que no entiendo muy bien es el enlace con el DataBinder.Eval
Con esto lo que estamso haciiendo es unir una columna a un campo del dataset o crear las columnas? por qeu ami lo que me interesa es crear las columnas.
  #11 (permalink)  
Antiguo 11/05/2005, 04:39
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
El DataBinder.Eval(e.Item.DataItem, "campo") te da acceso a los datos que se van leyendo en cada iteración. Entonces lo que supongo que se debería hacer es crear la columna a partir del dato.

Te pongo un ejemplo de como cargo yo un repeater haber si te podría valer esta solución o debemos buscar otra:

Código PHP:
 Private Sub repeater1_DataBinder(ByVal sender As System.ObjectByVal e As RepeaterItemEventArgsHandles repeater1.ItemDataBound
If Not DataBinder.Eval(e.Item.DataItem"id"Is Nothing Then
            Dim celda 
As TableCell
            Dim fila 
As TableRow = New TableRow


            celda 
= New TableCell
            celda
.Width.Percentage(15)
            
celda.CssClass "interiortabla"
            
celda.Text Convert.ToDateTime(DataBinder.Eval(e.Item.DataItem"fecha")).ToShortDateString
            fila
.Cells.Add(celda)

            
celda = New TableCell
            celda
.Width.Percentage(20)
            
celda.CssClass "interiortabla"
            
Dim n As String Convert.ToString(DataBinder.Eval(e.Item.DataItem"nomcliente"))
            If 
n.Length >= 33 Then
                celda
.Text n.Substring(020) + "..."
                
celda.ToolTip n
            
Else
                
celda.Text n
            End 
If

            
fila.Cells.Add(celda)

            
celda = New TableCell
            celda
.Width.Percentage(20)
            
celda.CssClass "interiortabla"
            
celda.Text Convert.ToString(DataBinder.Eval(e.Item.DataItem"asunto"))
            If 
celda.Text.Length 20 Then
                celda
.Text celda.Text.Substring(017) + "..."
                
celda.ToolTip Convert.ToString(DataBinder.Eval(e.Item.DataItem"asunto"))
            
End If
            
fila.Cells.Add(celda)

            
celda = New TableCell
            celda
.Width.Percentage(20)
            
celda.CssClass "interiortabla"
            
celda.Text Convert.ToString(DataBinder.Eval(e.Item.DataItem"lugar"))
            If 
celda.Text.Length 20 Then
                celda
.Text celda.Text.Substring(017) + "..."
                
celda.ToolTip Convert.ToString(DataBinder.Eval(e.Item.DataItem"lugar"))
            
End If
            
fila.Cells.Add(celda)

            
celda = New TableCell
            celda
.Width.Percentage(12)
            
celda.CssClass "interiortabla"
            
celda.Text Convert.ToString(DataBinder.Eval(e.Item.DataItem"nompersona"))
            If 
celda.Text.Length 15 Then
                celda
.Text celda.Text.Substring(012) + "..."
                
celda.ToolTip Convert.ToString(DataBinder.Eval(e.Item.DataItem"nompersona"))
            
End If
            
fila.Cells.Add(celda)

            
celda = New TableCell
            celda
.Width.Percentage(12)
            
celda.CssClass "interiortabla"
            
celda.Text Convert.ToString(DataBinder.Eval(e.Item.DataItem"nomusuario"))
            
fila.Cells.Add(celda)


            
repeater1.Controls.Add(fila)
        
End If
    
End Sub 
  #12 (permalink)  
Antiguo 11/05/2005, 07:04
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 3 meses
Puntos: 1
DataGrid1.Columns(0).Visible = False
Con esto,diseñando todas las columnas posibles y mostrando solo las que elija me kitaria de rollos raros.
No habiamos caido antes en esta posiblidad.
  #13 (permalink)  
Antiguo 11/05/2005, 08:21
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
también, seguramente es lo más facil
  #14 (permalink)  
Antiguo 11/05/2005, 08:28
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 3 meses
Puntos: 1
Lo probé y funciona ala perfección,me va al pelo

En resumen

Una pagina donde elje las columnas y puede elgir tb filtros por cada columna elegida.....
Otra pánina con un datagrid que contiene todas las columnas de la tabla,las cuales vienen definidas como yo kiero en el html,y que comprobando las columnas que ha elegido (que las recogo o atraves d ela url o por una variable d esession) las demas ponerl su columna visible=false,son unos cauntos if pero es la solución mas sencilla.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:51.