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.