Usuario
Mostrar selección desde base de datos en un dropdownlist incrustado en un GridView

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