Foros del Web » Programando para Internet » ASPX (.net) »

Ancho columnas Gridview

Estas en el tema de Ancho columnas Gridview en el foro de ASPX (.net) en Foros del Web. Buenas, tengo un problema con la anchura de las columnas de un Gridview, y es que la anchura se delimita por el tamaño que tenga ...
  #1 (permalink)  
Antiguo 23/04/2010, 09:41
 
Fecha de Ingreso: marzo-2010
Mensajes: 8
Antigüedad: 14 años, 9 meses
Puntos: 0
Ancho columnas Gridview

Buenas, tengo un problema con la anchura de las columnas de un Gridview, y es que la anchura se delimita por el tamaño que tenga el dato en cuestión... De esta manera al contener una columna muchísimos datos se me deforma y ocupa muchísimo.

Leyendo en distintos foros he leído que hay que modificar los width y tal... El código que tengo es el siguiente:

Código ASP:
Ver original
  1. AutoGenerateColumns="False"
  2.  
  3. ------
  4.  
  5.  <asp:BoundField DataField="usuario" HeaderText="usuario" ReadOnly="True"
  6.                             SortExpression="usuario">
  7.                             <FooterStyle HorizontalAlign="Center" Width="20px" Wrap="False"/>
  8.                             <HeaderStyle HorizontalAlign="Center" Width="20px" Wrap="False" />
  9.                             <ItemStyle HorizontalAlign="Center" Width="20px" Wrap="False"/>
  10.                         </asp:BoundField>

Necesito que tengan una anchura delimitada para no amorfar la tabla.

También tengo el siguiente problema. Tengo una columna con datos, me gustaría poder utilizarlos, pero que la columna no estuviese visible. Si pongo que esa columna en cuestión tenga "visible =false" A la hora de acceder a los datos con un row.cell[numero columna] me devuelve blanco.

Por tanto hay alguna opción de acceder a los datos, pero sin que se muestren en la Web?

Gracias
  #2 (permalink)  
Antiguo 25/04/2010, 12:43
Avatar de gakutaru  
Fecha de Ingreso: agosto-2005
Ubicación: frente a mi NtbK
Mensajes: 239
Antigüedad: 19 años, 3 meses
Puntos: 6
Respuesta: Ancho columnas Gridview

lo que hice yo para solucionar el problema del id es lo siguiente:

Código HTML:
Ver original
  1. <asp:BoundColumn ItemStyle-Width="1" DataField="idDocumento" HeaderText="ID" ReadOnly="true" Visible="false"  />
donde es la primera columna con visible=false

luego yo conosco dos maneras de obtener el id, ambas dependen de como se declare el Sub.

la primera forma:

Código vb:
Ver original
  1. Sub dgrObtenerid1(ByVal s As Object, ByVal e As DataGridCommandEventArgs)
  2.  
  3. Dim stridDoc As String = e.Item.Cells(0).Text 'obtener id
  4.  
  5. End Sub

y la segunda forma

Código vb:
Ver original
  1. Sub dgrObtenerid2(ByVal sender As Object, ByVal e As EventArgs)
  2.  
  3. Dim stridDoc As String = dgrDocumentos.SelectedItem.Cells(0).Text 'obtener id
  4.  
  5. End Sub

donde en mi caso dgrDocumentos es el id del datagrid

la primera forma se ocupa por ejemplo en el Update (OnUpdateCommand del datagrid) y la segunda forma en el Select (OnSelectedIndexChanged del datagrid)
  #3 (permalink)  
Antiguo 26/04/2010, 03:24
 
Fecha de Ingreso: marzo-2010
Mensajes: 8
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Ancho columnas Gridview

La solución que me planteas es más o menos lo que había intentado yo. El problema es que al poner el "visible" a False, cuando intento acceder con un Cells[0], me devuelve vacío, es decir no coge los datos de esa columna.
  #4 (permalink)  
Antiguo 26/04/2010, 06:26
Avatar de gakutaru  
Fecha de Ingreso: agosto-2005
Ubicación: frente a mi NtbK
Mensajes: 239
Antigüedad: 19 años, 3 meses
Puntos: 6
Respuesta: Ancho columnas Gridview

pon el codigo, el datagrid y la funcion.
  #5 (permalink)  
Antiguo 26/04/2010, 10:00
 
Fecha de Ingreso: marzo-2010
Mensajes: 8
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Ancho columnas Gridview

Ok, ahora pongo el código. Creo que todos mis problemas se deben a que doy unos valores de anchura y de visible antes de que los datos se "bindeen", por tanto, cuando se "bindean" al estar la columna a visible=false no se bindea esa columna, y la anchura del resto se amolda a los datos bindeados.

PD. Utilizo un AccesDataSource para meter los datos en la tabla.

Código ASP:
Ver original
  1. <asp:GridView ID="GridView1" runat="server" AllowPaging="True"
  2.                     AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="usuario,hora"
  3.                     DataSourceID="AccessDataSource1" EnableSortingAndPagingCallbacks="True"
  4.                     Width="299px">
  5.                     <PagerSettings FirstPageText="Principio" LastPageText="Final"
  6.                         NextPageText="Siguiente" PreviousPageText="Anterior" />
  7.                     <RowStyle Wrap="True" />
  8.                     <Columns>
  9.                         <asp:TemplateField>
  10.                             <ItemTemplate>
  11.                                 <asp:CheckBox ID="Selector" runat="server" />
  12.                             </ItemTemplate>
  13.                         </asp:TemplateField>
  14.                         <asp:BoundField DataField="usuario" HeaderText="usuario" ReadOnly="True"
  15.                             SortExpression="usuario">
  16.                             <FooterStyle HorizontalAlign="Center" Width="20px" Wrap="False" />
  17.                             <HeaderStyle HorizontalAlign="Center" Width="20px" Wrap="False" />
  18.                             <ItemStyle HorizontalAlign="Center" Width="20px" Wrap="False" />
  19.                         </asp:BoundField>
  20.                         <asp:BoundField DataField="hora" HeaderText="hora" ReadOnly="True"
  21.                             SortExpression="hora">
  22.                             <FooterStyle HorizontalAlign="Center" Width="20px" Wrap="False" />
  23.                             <HeaderStyle HorizontalAlign="Center" Width="20px" Wrap="False" />
  24.                             <ItemStyle HorizontalAlign="Center" Width="100px" Wrap="False" />
  25.                         </asp:BoundField>
  26.                         <asp:BoundField DataField="tipo" HeaderText="tipo" SortExpression="tipo">
  27.                             <ControlStyle Width="20px" />
  28.                             <FooterStyle Width="20px" Wrap="False" />
  29.                             <HeaderStyle Width="20px" Wrap="False" />
  30.                             <ItemStyle Width="100px" Wrap="False" />
  31.                         </asp:BoundField>
  32.                         <asp:BoundField ItemStyle-Width="1" DataField="dato" HeaderText="dato"
  33.                             SortExpression="dato" ReadOnly="true">
  34.                            
  35.                            
  36.                             <ItemStyle Width="100px" HorizontalAlign="Left" Wrap="False" />
  37.                            
  38.                            
  39.                         </asp:BoundField>
  40.                     </Columns>
  41.                     <PagerStyle HorizontalAlign="Center" />
  42.                     <SelectedRowStyle BackColor="#CCFFFF" BorderStyle="Solid" Font-Bold="True" />
  43.                     <EditRowStyle HorizontalAlign="Center" VerticalAlign="Middle" Width="20px"
  44.                         Wrap="True" />
  45.                     <AlternatingRowStyle BackColor="#CCFFCC" HorizontalAlign="Center"
  46.                         VerticalAlign="Middle" />
  47.                 </asp:GridView>

Código C#:
Ver original
  1. protected void BotonDibujar_Click(object sender, EventArgs e)
  2.     {
  3.  
  4.         foreach (GridViewRow row in GridView1.Rows)
  5.         {
  6.             CheckBox cb = (CheckBox)row.FindControl("Selector");
  7.             if (cb != null && cb.Checked)
  8.             {
  9.                
  10.                 s = s + row.Cells[4].Text + ";";
  11. ...
  #6 (permalink)  
Antiguo 26/04/2010, 10:55
Avatar de gakutaru  
Fecha de Ingreso: agosto-2005
Ubicación: frente a mi NtbK
Mensajes: 239
Antigüedad: 19 años, 3 meses
Puntos: 6
Respuesta: Ancho columnas Gridview

ya okas, mira, en el caso de recuperar el id mientras se recorre una serie de checkboxs, yo lo hago de una 3ra forma, que es recuperandolas de un label invisible, la primera columna se declara algo asi, creo que el id que recuperas se llama 'dato'...

Código HTML:
Ver original
  1. .....
  2.                     <Columns>
  3.                     <asp:TemplateColumn HeaderText="dato" Visible="false">
  4.                      <ItemTemplate>
  5.                      <asp:Label ID="lblDato" Text='<%# DataBinder.Eval(Container.DataItem,"dato") %>' runat="server" />
  6.                      </ItemTemplate>
  7.                      </asp:TemplateColumn>
  8.                         <asp:TemplateField>
  9.                             <ItemTemplate>
  10.                                 <asp:CheckBox ID="Selector" runat="server" />
  11.                             </ItemTemplate>
  12.                         </asp:TemplateField>
  13.                         <asp:BoundField DataField="usuario" HeaderText="usuario" ReadOnly="True"
  14.                            SortExpression="usuario">
  15.                             <FooterStyle HorizontalAlign="Center" Width="20px" Wrap="False" />
  16.                             <HeaderStyle HorizontalAlign="Center" Width="20px" Wrap="False" />
  17.                             <ItemStyle HorizontalAlign="Center" Width="20px" Wrap="False" />
  18.                         </asp:BoundField>
  19.                         <asp:BoundField DataField="hora" HeaderText="hora" ReadOnly="True"
  20.                            SortExpression="hora">
  21.                             <FooterStyle HorizontalAlign="Center" Width="20px" Wrap="False" />
  22.                             <HeaderStyle HorizontalAlign="Center" Width="20px" Wrap="False" />
  23.                             <ItemStyle HorizontalAlign="Center" Width="100px" Wrap="False" />
  24.                         </asp:BoundField>
  25.                         <asp:BoundField DataField="tipo" HeaderText="tipo" SortExpression="tipo">
  26.                             <ControlStyle Width="20px" />
  27.                             <FooterStyle Width="20px" Wrap="False" />
  28.                             <HeaderStyle Width="20px" Wrap="False" />
  29.                             <ItemStyle Width="100px" Wrap="False" />
  30.                         </asp:BoundField>
  31.                         <asp:BoundField ItemStyle-Width="1" DataField="dato" HeaderText="dato"
  32.                            SortExpression="dato" ReadOnly="true">
  33.                            
  34.                            
  35.                             <ItemStyle Width="100px" HorizontalAlign="Left" Wrap="False" />
  36.                            
  37.                            
  38.                         </asp:BoundField>
  39.                     </Columns>
  40.                     ......

don el lbl esta aqui:


<asp:TemplateColumn HeaderText="dato" Visible="false">
<ItemTemplate>
<asp:Label ID="lblDato" Text='<%# DataBinder.Eval(Container.DataItem,"dato") %>' runat="server" />
</ItemTemplate>
</asp:TemplateColumn>


y en la funcion seria algo asi: (en VB)

Código vb:
Ver original
  1. Sub ShowSelections(ByVal sender As System.Object, ByVal e As System.EventArgs)
  2.  Dim dgItem As DataGridItem
  3.  Dim chkSelected As CheckBox
  4.  Dim strid As String
  5.  For Each dgItem In ItemsGrid.Items
  6.             chkSelected = dgItem.FindControl("Selector")
  7.             If chkSelected.Checked Then
  8.                 strid = CType(dgItem.FindControl("lblDato"), Label).Text
  9.             End If
  10.   Next
  11. .....
  12. End Sub
basicamente la linea 'CType(dgItem.FindControl("lblDato"), Label).Text ' recupera el id, asi que puedes meterla a un string, o lo que necesites.
  #7 (permalink)  
Antiguo 26/04/2010, 10:58
 
Fecha de Ingreso: marzo-2010
Mensajes: 8
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Ancho columnas Gridview

He probado a usar el siguiente evento:

Código C#:
Ver original
  1. protected void GridView1_RowDataBound(object sender,
  2.         GridViewRowEventArgs e)
  3.     {
  4.         System.Data.DataRowView drv;
  5.         drv = (System.Data.DataRowView)e.Row.DataItem;
  6.          if (drv != null)
  7.          {
  8.  
  9.             e.Row.Cells[4].Visible = false;
  10.           }
  11.     }

En principio funciona, pero no se hasta que punto puede ser menos eficiente, ya que cada vez que se añade una fila salta el evento.
  #8 (permalink)  
Antiguo 26/04/2010, 11:13
Avatar de gakutaru  
Fecha de Ingreso: agosto-2005
Ubicación: frente a mi NtbK
Mensajes: 239
Antigüedad: 19 años, 3 meses
Puntos: 6
Respuesta: Ancho columnas Gridview

Cita:
Iniciado por soulforged Ver Mensaje
He probado a usar el siguiente evento:

Código C#:
Ver original
  1. protected void GridView1_RowDataBound(object sender,
  2.         GridViewRowEventArgs e)
  3.     {
  4.         System.Data.DataRowView drv;
  5.         drv = (System.Data.DataRowView)e.Row.DataItem;
  6.          if (drv != null)
  7.          {
  8.  
  9.             e.Row.Cells[4].Visible = false;
  10.           }
  11.     }

En principio funciona, pero no se hasta que punto puede ser menos eficiente, ya que cada vez que se añade una fila salta el evento.
aun no se tanto C#, pero intenta usando el label.
  #9 (permalink)  
Antiguo 26/04/2010, 13:27
Avatar de lucasmoadr  
Fecha de Ingreso: marzo-2007
Ubicación: Llavallol, Buenos Aires
Mensajes: 220
Antigüedad: 17 años, 8 meses
Puntos: 5
Respuesta: Ancho columnas Gridview

el roedatabound siempre se ejecuta cuando te crea una fila, ahi debes cargar los datos en las celdas.
ahi puedes tambien bindear en la columna no visible. Esa es la forma correcta.
__________________
Alquileres en la costa
Se tu mismo

Etiquetas: ancho, columnas, gridview, aspx
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 05:32.