none
Datagridview, List (of, Ordenar y otros. RRS feed

  • Pregunta

  • Estoy haciendo una aplicación en 3 capas, en Modo desconectado y uso SQL Server.

    Para rellenar el datagridview donde muestro los datos de los clientes uso la siguiente funcion

    Public Function Listar_Clientes(ByVal ConexionBD As SqlConnection) As List(Of eCliente)
            Dim loeCliente As New List(Of CapaEntidad.eCliente)
            Dim ComandoSql As New SqlCommand("Listar_Clientes_SQL", ConexionBD)
            ComandoSql.CommandType = CommandType.StoredProcedure
            ComandoSql.CommandTimeout = 60
            Dim drClientes As SqlDataReader = ComandoSql.ExecuteReader(CommandBehavior.SingleResult)
            If drClientes IsNot Nothing Then
                Dim posCodigoCliente As Integer = drClientes.GetOrdinal("CodigoCliente")
                Dim posNombresApellidos As Integer = drClientes.GetOrdinal("NombresApellidos")
                Dim posDireccion As Integer = drClientes.GetOrdinal("Direccion")
                Dim posTelefono As Integer = drClientes.GetOrdinal("Telefono")
                Dim posDNI As Integer = drClientes.GetOrdinal("DNI")
                Dim posFechaIngreso As Integer = drClientes.GetOrdinal("FechaIngreso")
                Dim posFotoCliente As Integer = drClientes.GetOrdinal("FotoCliente")
                Dim oeCliente As CapaEntidad.eCliente
                Do While drClientes.Read
                    oeCliente = New CapaEntidad.eCliente
                    With oeCliente
                        .CodigoCliente = drClientes.GetInt32(posCodigoCliente)
                        .NombresApellidos = drClientes.GetString(posNombresApellidos)
                        .Direccion = drClientes.GetString(posDireccion)
                        .Telefono = drClientes.GetString(posTelefono)
                        .Dni = drClientes.GetString(posDNI)
                        .FechaIngreso = drClientes.GetDateTime(posFechaIngreso)
                        .FotoCliente = drClientes.GetString(posFotoCliente)
                    End With
                    loeCliente.Add(oeCliente)
                Loop
                drClientes.Close()
            End If
            Return (loeCliente)
        End Function 

    El porque utilice listas fue porque cuando editaba un registro quería que el registro editado quedara seleccionado en el datagridview, lo mismo que al momento de agregar un registro. Para eso use la variable POS:

    Public Function Editar_Cliente(ByVal ConexionBD As SqlConnection, ByVal oeCliente As eCliente) As Boolean
            Dim Exito As Boolean = False
            Dim ComandoSql As New SqlCommand("Editar_Cliente_SQL", ConexionBD)
            ComandoSql.CommandType = CommandType.StoredProcedure
            ComandoSql.Parameters.AddWithValue("@CodigoCliente", oeCliente.CodigoCliente)
            ComandoSql.Parameters.AddWithValue("@NombresApellidos", oeCliente.NombresApellidos)
            ComandoSql.Parameters.AddWithValue("@Direccion", oeCliente.Direccion)
            ComandoSql.Parameters.AddWithValue("@Telefono", oeCliente.Telefono)
            ComandoSql.Parameters.AddWithValue("@Dni", oeCliente.Dni)
            ComandoSql.Parameters.AddWithValue("@FotoCliente", oeCliente.FotoCliente)
            Dim nRegistros As Integer = ComandoSql.ExecuteNonQuery
            Exito = (nRegistros > 0)
            Return (Exito)

        End Function

     Private Sub tsbEditar_Click(sender As Object, e As EventArgs) Handles tsbEditar.Click
            Dim row As DataGridViewRow = dgvClientes.CurrentRow
            Dim ofrmEditarCliente As New frmEditarCliente(row)
            If (ofrmEditarCliente.ShowDialog() = DialogResult.OK) Then
                Dim Pos As Integer = bs_Clientes.Position
                If txtCadenaBusqueda.Text <> "" Then
                    ListarClientesBuscados(txtCadenaBusqueda.Text)
                ElseIf rbCreadosHoy.Checked Then
                    ListarClientesCreadosHoy()
                ElseIf rbLaUltimaSemana.Checked Then
                    ListarClientesCreadosUltimaSemana()
                ElseIf rbElUltimoMes.Checked Then
                    ListarClientesCreadosUltimoMes()
                Else
                    ListarClientes()
                End If
                bs_Clientes.Position = Pos <---------------------------------------------
            End If
        End Sub

    Lo que hace que al terminar de editar y rellenar nuevamente el datagridview (dgvClientes) el registro editado queda seleccionado o resaltado.

    La pregunta es:

    ¿como puedo ordenar este datgridview haciendo clic en la cabecera de la columna?

    Ademas:

    Que otro elemento podría usar en lugar de un list (of para trabajar con los datos que tengo en mi tabla clientes y ademas poder ordenar de forma ascendente o descendente por todas las columnas de mi tabla y ademas que si añado un registro este quede resaltado en datagridview y lo mismo suceda si lo edito.

    Gracias.


    viernes, 17 de marzo de 2017 19:49