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

No entra en evento sortCommand

Estas en el tema de No entra en evento sortCommand en el foro de ASPX (.net) en Foros del Web. Hola! Tengo un datagrid con el siguiente código: <asp:datagrid id="dgResultados" OnSortCommand="dgResultados_SortCommand" AllowSorting="true" runat="server"></asp:datagrid> Creo las columnas por código de este modo: dgResultados.AutoGenerateColumns = False For ...
  #1 (permalink)  
Antiguo 26/09/2006, 04:16
TaM
 
Fecha de Ingreso: noviembre-2005
Mensajes: 58
Antigüedad: 18 años, 5 meses
Puntos: 0
No entra en evento sortCommand

Hola!

Tengo un datagrid con el siguiente código:

<asp:datagrid id="dgResultados" OnSortCommand="dgResultados_SortCommand" AllowSorting="true" runat="server"></asp:datagrid>

Creo las columnas por código de este modo:

dgResultados.AutoGenerateColumns = False

For x = 0 To iColumnasYOrden - 1
Select Case strTipoColumnas(x)
Case "BoundColumn"
Dim bc As New BoundColumn
bc.DataField = strColumnasYOrden(x)
bc.HeaderText = strNombreColumnas(x)
bc.SortExpression = strColumnasYOrden(x)
dgResultados.Columns.Add(bc)
dgResultados.Columns(x).Visible = bVisibilidadColumnas(x)
.
.
.
End Select
Next

(todas las crea de tipo BoundColumn

Y creo q el siguiente evento:

Public Sub dgResultados_SortCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridSortCommandEvent Args) Handles dgResultados.SortCommand

dim strOrderBy as string = e.sortExpression
CargaDataGrid(strOrderBy)

End Sub

Pq no me entra en el evento cuando hago clic sobre el título de alguna de las columnas?
  #2 (permalink)  
Antiguo 26/09/2006, 07:49
 
Fecha de Ingreso: marzo-2003
Mensajes: 85
Antigüedad: 21 años, 1 mes
Puntos: 1
TaM, no sé cómo será tu código exactamente pero hice la prueba según entendí que hacías y me funcionó bien. Te pongo mi código por si te sirve de ayuda para revisar el tuyo (estoy usando VS2005), no obstante si pegas todo el tuyo se le puede echar un vistazo.

En el .aspx, sólo puse el DataGrid dentro del formulario tal como lo tenías:

Código:
<asp:datagrid id="dgResultados" OnSortCommand="dgResultados_SortCommand" AllowSorting="true" runat="server"></asp:datagrid>
El Code-Behind usado:
Código:
Imports System.Data.SqlClient

Partial Class Default
    Inherits System.Web.UI.Page

    Private strTipoColumnas(3) As String
    Private strColumnasYOrden(3) As String
    Private strNombreColumnas(3) As String
    Private bVisibilidadColumnas(3) As Boolean
    Private iColumnasYOrden As Int32
    Private x As Int32
    Private sqlCon As SqlConnection
    Private sqlComando As SqlCommand

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        CargaDataGrid("iddatospersonales")
    End Sub

    Private Sub CargaDataGrid(ByVal strOrderBy As String)
        sqlCon = New SqlConnection("tu cadena de conexión")
        sqlComando = New SqlCommand()
        sqlcomando.Connection = sqlCon
        'Aquí el comando de tu consulta
        sqlcomando.CommandText = "Select idDatosPersonales, nombre, apellidos, movil from Tabla Order By " & strOrderBy
        sqlCon.Open()
        Dim ds As SqlDataReader
        ds = sqlcomando.ExecuteReader()

        dgResultados.Columns.Clear()
        Me.strTipoColumnas(0) = "BoundColumn"
        Me.strTipoColumnas(1) = "BoundColumn"
        Me.strTipoColumnas(2) = "BoundColumn"
        Me.strTipoColumnas(3) = "BoundColumn"
        Me.strColumnasYOrden(0) = "idDatosPersonales"
        Me.strColumnasYOrden(1) = "Nombre"
        Me.strColumnasYOrden(2) = "Apellidos"
        Me.strColumnasYOrden(3) = "movil"
        Me.strNombreColumnas(0) = "ID"
        Me.strNombreColumnas(1) = "nombre"
        Me.strNombreColumnas(2) = "apellidos"
        Me.strNombreColumnas(3) = "móvil"
        Me.bVisibilidadColumnas(0) = False
        Me.bVisibilidadColumnas(1) = True
        Me.bVisibilidadColumnas(2) = True
        Me.bVisibilidadColumnas(3) = True

        Me.iColumnasYOrden = Me.strColumnasYOrden.Length()
        dgResultados.AutoGenerateColumns = False
        For x = 0 To iColumnasYOrden - 1
            Select Case strTipoColumnas(x)
                Case "BoundColumn"
                    Dim bc As New BoundColumn
                    bc.DataField = strColumnasYOrden(x)
                    bc.HeaderText = strNombreColumnas(x)
                    bc.SortExpression = strColumnasYOrden(x)
                    dgResultados.Columns.Add(bc)
                    dgResultados.Columns(x).Visible = bVisibilidadColumnas(x)
            End Select
        Next
        Me.dgResultados.DataSource = ds
        Me.dgResultados.DataBind()
    End Sub

    Protected Sub dgResultados_SortCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridSortCommandEventArgs) Handles dgResultados.SortCommand
        Dim strOrderBy As String = e.SortExpression
        CargaDataGrid(strOrderBy)
    End Sub
End Class
Como ves puse datos concretos para hacer las pruebas, pero debería de funcionar igual.

Espero te sirva.

Un saludo.
  #3 (permalink)  
Antiguo 26/09/2006, 08:03
TaM
 
Fecha de Ingreso: noviembre-2005
Mensajes: 58
Antigüedad: 18 años, 5 meses
Puntos: 0
Muchas gracias por probarlo!

He seguido haciendo pruebas y he visto que si creo las columnas en el html sí que me entra en el evento. No lo entiendo...Yo utilizo la versión 2003, pero sería raro que dependiera de eso...

Mi código es enorme...lo que controla el Datagrid basicamente es lo que pegué.

en el html:

<asp:datagrid id="dgResultados" AllowSorting="True" AutoGenerateColumns="False" OnSortCommand="dgResultados_SortCommand" />

y luego en el código, entre otras cosas, hago esto:

Protected Sub CargaDataGrid(ByVal strOrderBy As String)
Dim oDataSet As DataSet
Dim strCursor As String

RecogerDatos()

strCursor = "HD_T_PERIFERICOS"
oDataSet = oPerifericos.BuscarPeriferico(strNserie, iMarca, iModelo, iTipoPeriferico, iEstado, strCursor, strOrderBy)

CrearColumnas(oDataSet, strCursor)

dgResultados.DataSource = oDataSet.Tables(strCursor)
dgResultados.DataBind()

EstiladgResultados()
End Sub


Protected Sub CrearColumnas(ByVal oDataSet As DataSet, ByVal strCursor As String)
'defino las columnas q va a tener el datagrid dependiendo del datatable q luego se le asignara
Dim strColumnasYOrden(7) As String
Dim strNombreColumnas(7) As String
Dim strTipoColumnas(7) As String
Dim bVisibilidadColumnas(7) As Boolean

strColumnasYOrden(0) = "PER_IDPERIFERICO"
strNombreColumnas(0) = "Id periférico"
strTipoColumnas(0) = "BoundColumn"
bVisibilidadColumnas(0) = False

strColumnasYOrden(5) = "PER_NOMBREMAQUINA"
strNombreColumnas(5) = "Máquina"
strTipoColumnas(5) = "BoundColumn"
bVisibilidadColumnas(5) = True

strColumnasYOrden(2) = "PER_NSERIE"
strNombreColumnas(2) = "Número de serie"
strTipoColumnas(2) = "BoundColumn"
bVisibilidadColumnas(2) = True

strColumnasYOrden(1) = "TP_NOMBREPERIFERICO"
strNombreColumnas(1) = "Tipo periférico"
strTipoColumnas(1) = "BoundColumn"
bVisibilidadColumnas(1) = True

strColumnasYOrden(4) = "MOD_NOMBREMARCAMODELO"
strNombreColumnas(4) = "Modelo"
strTipoColumnas(4) = "BoundColumn"
bVisibilidadColumnas(4) = True

strColumnasYOrden(3) = "MAR_NOMBREMARCA"
strNombreColumnas(3) = "Marca"
strTipoColumnas(3) = "BoundColumn"
bVisibilidadColumnas(3) = True

strColumnasYOrden(6) = "TTEC_NOMBRETIPOTECLADO"
strNombreColumnas(6) = "Tipo teclado"
strTipoColumnas(6) = "BoundColumn"
bVisibilidadColumnas(6) = True

oUtilidades.OrdenarBorrarColumnasEnDataGrid(strCol umnasYOrden, strNombreColumnas, strTipoColumnas, bVisibilidadColumnas, dgResultados)

End Sub

y luego la clase oUtilidades tiene el siguiente método:

Public Sub OrdenarBorrarColumnasEnDataGrid(ByVal strColumnasYOrden() As String, ByVal strNombreColumnas() As String, ByVal strTipoColumnas() As String, ByVal bVisibilidadColumnas() As Boolean, ByVal oDataGrid As DataGrid)
Dim iColumnasYOrden As Integer = strColumnasYOrden.Length
Dim x As Integer

If strNombreColumnas.Length = iColumnasYOrden And strTipoColumnas.Length = iColumnasYOrden And bVisibilidadColumnas.Length = iColumnasYOrden Then

oDataGrid.AutoGenerateColumns = False

For x = 0 To iColumnasYOrden - 1
Select Case strTipoColumnas(x)
Case "BoundColumn"
Dim bc As New BoundColumn
bc.DataField = strColumnasYOrden(x)
bc.HeaderText = strNombreColumnas(x)
bc.SortExpression = strColumnasYOrden(x)
oDataGrid.Columns.Add(bc)
oDataGrid.Columns(x).Visible = bVisibilidadColumnas(x)
End Select
Next

End If

End Sub
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:53.