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

Columnas DataGrid

Estas en el tema de Columnas DataGrid en el foro de ASPX (.net) en Foros del Web. Hola a todos, Llevo varios dias intentando cambiar el nombre las columnas de un DataGrid, os cuento. En evento Load de la pagina llamo al ...
  #1 (permalink)  
Antiguo 31/01/2006, 02:02
 
Fecha de Ingreso: febrero-2005
Mensajes: 18
Antigüedad: 19 años, 2 meses
Puntos: 0
Columnas DataGrid

Hola a todos,
Llevo varios dias intentando cambiar el nombre las columnas de un DataGrid, os cuento.

En evento Load de la pagina llamo al siguiente procedimiento en el cual cargo un DataTable con la tabla en cuestión además de renombrar el nombre de las columnas para que sean mas acordes al usuario

Código:
Private Sub AbrirTabla()
	TablaDatos = AccesoFB.AbrirTabla("SELECT UserName, FullName FROM Usuarios ORDER BY UserName;")
	TablaDatos.Columns("UserName").Caption = "Usuario"
      TablaDatos.Columns("FullName").Caption = "Nombre completo"
End Sub
Con esta tabla genero una vista con la siguiente función:

Código:
Public Function CreaVista(ByVal LosDatos As DataTable, ByVal Opciones As TFindDBOptions) As DataView

      Dim dvVista As DataView

      dvVista = New DataView(LosDatos)

      If Not Opciones.Decreciente Then
      	dvVista.Sort = Opciones.Ordenar
      Else
           	dvVista.Sort = Opciones.Ordenar + " DESC"
      End If

      dvVista.RowFilter = Opciones.Filtrar
      dvVista.RowStateFilter = DataViewRowState.CurrentRows

      Return dvVista
End Function
Donde TFindDBOptions es una estructura con la siguiente declaración:

Código:
Public Structure TFindDBOptions
      Dim Ordenar As String
      Dim Filtrar As String
      Dim Decreciente As Boolean
      Dim Pagina As Integer
End Structure
Una vez generada la vista se la asigno al DataGrid y lo enlazo:

Código:
dgDatos.DataSource = dvVista
dgDatos.DataBind()
Pero este DataGrid en las columnas (HeaderText) tiene el nombre contenido en la propiedad ColumnName del DataTable (el nombre original de las columnas) en vez del nombre contenido en la propiedad Caption (el nombre que yo quiero que aparezca).

He intentado hacerlo con el siguiente código:

Código:
Dim n As Integer
For n = 0 To _dtTable.Columns.Count - 1
	dgDatos.Columns(n).HeaderText = _dtTable.Columns(n).Caption 
Next
Pero este me genera un error de que la columna no es valida, tras depurar paso a paso veo que el número de columnas es siempre 0 cuando solo hay columnas que provienen de una fuente de datos vinculada mediante la propiedad DataSource del DataGrid, si se asignan columnas, por ejemplo, del tipo ButtonColumn si se refleja en la cantidad devuelta por la propiedad Count (DataGrid.Columns.Count).

¿A alguien le paso esto alguna vez?
¿Alguna solución?

Mil gracias y un saludo.
Antonio J. Évora
  #2 (permalink)  
Antiguo 31/01/2006, 02:32
 
Fecha de Ingreso: julio-2003
Mensajes: 102
Antigüedad: 20 años, 9 meses
Puntos: 0
creo, si no me confundo que para darle formato a las comlumnas, titulos, formatos a los campos y demas, tienes que hacerlo en el evento itemdatabound del datagrid.
yo lo hago de la sigueite manera:

Private Sub DgRecibidas_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DgRecibidas.ItemDataBound
On Error Resume Next 'puede que la fecha de necesidad no esté introducida
e.Item.Cells(1).Visible = False
e.Item.Cells(2).HorizontalAlign = HorizontalAlign.Center
e.Item.Cells(5).HorizontalAlign = HorizontalAlign.Center
e.Item.Cells(11).HorizontalAlign = HorizontalAlign.Center
e.Item.Cells(12).HorizontalAlign = HorizontalAlign.Center
e.Item.Cells(13).HorizontalAlign = HorizontalAlign.Center
e.Item.Cells(14).HorizontalAlign = HorizontalAlign.Center
e.Item.Cells(17).Visible = False
e.Item.Cells(15).Visible = False
e.Item.Cells(16).Visible = False
e.Item.Cells(18).Visible = False
If e.Item.ItemIndex = -1 Then e.Item.Cells(13).Text = "Ret."
If e.Item.ItemIndex = -1 Then Exit Sub
Select Case e.Item.Cells(15).Text 'Estado
Case "1" : e.Item.Cells(8).ForeColor = Color.Blue
Case "3" : e.Item.Cells(8).ForeColor = Color.Red
Case "5" : e.Item.Cells(8).ForeColor = Color.Red
Case "7" : e.Item.Cells(8).ForeColor = Color.Black
Case "11" : e.Item.Cells(8).ForeColor = Color.Red
Case "10" : e.Item.Cells(8).ForeColor = Color.Green
Case Else : e.Item.Cells(8).ForeColor = Color.Orange
End Select
Select Case e.Item.Cells(14).Text
Case "1" : e.Item.Cells(14).Text = "B"
Case "2" : e.Item.Cells(14).Text = "M"
Case "3" : e.Item.Cells(14).Text = "A"
End Select
e.Item.Cells(8).Font.Bold = True
e.Item.Cells(4).Text = CDate(e.Item.Cells(4).Text).ToString("dd/MM/yy") 'Fechas
e.Item.Cells(6).Text = CDate(e.Item.Cells(6).Text).ToString("dd/MM/yy") 'Fechas
e.Item.Cells(9).Text = CDate(e.Item.Cells(9).Text).ToString("dd/MM/yy") 'Fechas
'Retraso
If Len(Trim(Replace(e.Item.Cells(17).Text, " ", ""))) = 0 Then e.Item.Cells(17).Text = CDate(Now()).ToShortDateString
If Len(Trim(Replace(e.Item.Cells(6).Text, " ", ""))) = 0 Then
e.Item.Cells(13).Text = "0"
Else
e.Item.Cells(13).Text = DateDiff(DateInterval.Day, CDate(e.Item.Cells(6).Text), CDate(e.Item.Cells(17).Text))
End If
If CInt(e.Item.Cells(13).Text) < 0 Then e.Item.Cells(13).Text = "0"
End Sub

Yo en este evento dor formato de fechas, alinio campos, etc
Supongo que es aqui donde podras cambiar el encabezado de cada columna.
Si tu datagrid lo haces con columnas fijas, en el diseñador lo puedes cambiar.

UN saludo
  #3 (permalink)  
Antiguo 31/01/2006, 02:59
 
Fecha de Ingreso: febrero-2005
Mensajes: 18
Antigüedad: 19 años, 2 meses
Puntos: 0
Gracias Willy Fog por tu respuesta, lo probare y te cuento.

Un saludo y mil gracias
Antonio J. Évora
  #4 (permalink)  
Antiguo 01/02/2006, 04:21
 
Fecha de Ingreso: febrero-2005
Mensajes: 18
Antigüedad: 19 años, 2 meses
Puntos: 0
Hola a todos y en especial a Willy Fog

Aunque la propuesta de Willy Fog me resulta muy interesante al final he optado por asignar el nombre que quiero darle a la columna a la propiedad ColumnName del DataColumn así obtengo el resultado deseado utilizando la generación automática de columnas, ya que no puedo (debo) pararme en implementar el tema de la generación manual de columnas.

Un saludo y gracias.
Antonio J. Évora
  #5 (permalink)  
Antiguo 13/03/2008, 15:58
 
Fecha de Ingreso: abril-2003
Mensajes: 4
Antigüedad: 21 años
Puntos: 0
Re: Columnas DataGrid

Por si a alguien le puede servir; yo pude cambiar los titulos de un datagrid usando lo siguiente:

DataGridView1.Column(0).HeaderText = "Nombre"

DataGridView1.Column(1).HeaderText = "Apellido Paterno"

DataGridView1.Column(2).HeaderText = "Apellido Materno"
  #6 (permalink)  
Antiguo 05/11/2009, 17:33
 
Fecha de Ingreso: noviembre-2009
Mensajes: 1
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Columnas DataGrid

Gracias, este tema me ayudo en la aplicación que estoy desarrollando

saludos
  #7 (permalink)  
Antiguo 06/11/2009, 10:12
 
Fecha de Ingreso: octubre-2009
Ubicación: Caucasia-Antioquia
Mensajes: 87
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: Columnas DataGrid

Te Doy Un Pequeño Consejo... Intenta aprender trabajar con procedimientos almacenados... Asi no mezclas los lenguajes de Programacion....

Mira Este codigo

estos son los parametros... @Documento
y este el procedimiento almacenado que hago en mi base de datos... "SP_GridViewPropuestas"


SqlConnection cn = new SqlConnection(configuracion);
SqlCommand PrDatagrid = new SqlCommand("SP_GridViewPropuestas", cn);
DataTable dt = new DataTable();
PrDatagrid.CommandType = CommandType.StoredProcedure;
cn.Open();

SqlParameter Parametro_Documento = PrDatagrid.Parameters.Add("@Documento", SqlDbType.VarChar);
Parametro_Documento.Value = LBLDocumento.Text;

SqlDataAdapter AdpSQL = new SqlDataAdapter(PrDatagrid);
AdpSQL.SelectCommand = PrDatagrid;
AdpSQL.SelectCommand.Connection = cn;
DataSet D = new DataSet();
AdpSQL.Fill(D);

this.GridView1.DataSource = D.Tables[0];
this.GridView1.DataBind();




Suerte....
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

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 15:48.