none
Mostrar selección desde base de datos en un dropdownlist incrustado en un GridView RRS feed

  • Pregunta

  • Hola muchachos, quisiera pedirle nuevamente su ayuda con algo que me tiene estancado.

    Estoy trabajando con un GridView en .net y sqlserver 2008. El tema es que logre incrustar un dropdownlist dentro de un GridView y cargarlo con los valores de una tabla llamada "Estado" (con un procedimiento almacenado), la cual tiene las filas Abierto, En Proceso y Finalizado.

    Además tengo otra tabla llamada Incidente, que es donde van guardados los datos principales y una de las columnas corresponde a la tabla Estado.

    Lo que necesito es mostrar el estado seleccionado, que viene desde la tabla Incidente, en el dropdownlist que va dentro del GridView.

    Todo esto para posteriormente agregar un botón Guardar, en otra columna, y así actualizar el registro con un nuevo estado.

    Les dejo los códigos respectivos:

    HTML y VB.NET

    <asp:TemplateField HeaderText="Estado">
                                <ItemTemplate>
                                    <asp:DropDownList ID="ddlEstado" runat="server" width="100px">
                                    </asp:DropDownList>
                                </ItemTemplate>
                            </asp:TemplateField>
    Protected Sub dgvIncidenteEncargado_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles dgvIncidenteEncargado.RowDataBound
    
            If e.Row.RowType = DataControlRowType.DataRow Then
    
                Dim ddlEstado As DropDownList = CType(e.Row.FindControl("ddlEstado"), DropDownList)
    
                Dim dsEstado As New DataSet
                dsEstado = ObtenerEstado()
                Cargar_Objeto(dsEstado, "ddlEstado", ddlEstado, True)
    
                ddlEstado.DataTextField = "Nombre_estado"
                ddlEstado.DataValueField = "Id_estado"
                ddlEstado.DataBind()
    
            End If

    Espero me puedan ayudar, se los agradecería mucho.

    Saludos


    • Editado n4n2 miércoles, 9 de diciembre de 2015 17:20
    miércoles, 9 de diciembre de 2015 17:18

Todas las respuestas

  • hola

    si la idea es guardar porque no defines el dropdownlist en el template de edicion de la columna ? o sea deberias poner la row en edicion para habilitar el combo y asi seleccionar y luego guardar

    porque habilitar el combo sin poner la row en edicion?

    por otro lado marcar la opcion del combo por la que viene de la db debes usar el mismo evento RowDataBound, alli mismo despues de asignar el DataSource, pero la verdad no entiendo que es eso de Cargar_Objeto() si una vez que tienes el datatable simplemente usas


    ddlEstado.DataTextField = "Nombre_estado" ddlEstado.DataValueField = "Id_estado"

    ddlEstado.Datasource = dsEstado.Tables[0];
    ddlEstado.DataBind()

    no entiendo para que el Cargar_Objeto()

    ---

    En resumen luego de hacer el Databind() del dropdownlist deebs asignar el SelectedValue con el valor que venga del source del gridview

    Para esto te puedes ayudar con el

    GridViewRow.DataItem (Propiedad)

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 10 de diciembre de 2015 5:20
  • Hola Leandro, gracias por responder y darme una ayuda.

    Mira el metodo Cargar_Objeto() lo utilizo para llenar  los dropdownlist a partir del dataset que me entrega la función ObtenerEstado() y el nombre del dropdownlist que en este caso es ddlEstado.

    Te dejó el código de Cargar_Objeto() :

    Public Shared Sub Cargar_Objeto(ByVal dsAux As DataSet, _
                                        ByVal tabla As String, _
                                        ByVal obj As Object, _
                                        ByVal bolTodos As Boolean, _
                                        Optional ByVal Ninguno As Boolean = False, _
                                        Optional ByVal TipoRut As Boolean = False)
            'Procedimiento que carga objetos de lista a partir de un dataset
            'Dropdownlist, ListBox, RadioButtonList y CheckBoxlist
            If dsAux.Tables.Count <> 0 Then
                If dsAux.Tables(tabla).Rows.Count <> 0 Then
                    With obj
                        .DataSource = dsAux.Tables(tabla)
                        .DataValueField = dsAux.Tables(tabla).Columns(0).ColumnName
                        If dsAux.Tables(tabla).Columns.Count = 1 Then
                            .DataTextField = dsAux.Tables(tabla).Columns(0).ColumnName
                        Else
                            .DataTextField = dsAux.Tables(tabla).Columns(1).ColumnName
                        End If
                        .DataBind()
                    End With
                Else
                    obj.items.clear()
                End If
            Else
                obj.items.clear()
            End If
    
            If bolTodos Then
                With obj
                    .Items.Insert(0, New ListItem("Seleccionar", "0"))
                    .SelectedIndex = 0
                End With
            End If
            If Ninguno Then
                If TipoRut Then
                    With obj
                        .Items.Insert(0, New ListItem("Ninguno", "0000000000-0"))
                        .SelectedIndex = 0
                    End With
                Else
                    With obj
                        .Items.Insert(0, New ListItem("Ninguno", "0"))
                        .SelectedIndex = 0
                    End With
                End If
            End If
        End Sub

    y este es el de ObtenerEstado():

    Public Shared Function ObtenerEstado() As DataSet
            Dim dset As New DataSet
            Dim commando As New SqlCommand
            Dim da As New SqlDataAdapter(commando)
            With commando
                .Connection = ClsConexion.SQL_Conexion
                .Parameters.Clear()
                .CommandType = CommandType.StoredProcedure
                .CommandText = "SP_ddlEstado"
                .ExecuteNonQuery()
                da.SelectCommand = commando
                da.Fill(dset, "ddlEstado")
                .Dispose()
            End With
            Return dset
        End Function

    jueves, 10 de diciembre de 2015 15:34