La mitad de la batalla para obtener una respuesta es saber cómo hacer la pregunta. No estoy seguro de estar haciendo un buen trabajo, pero esta es mi mejor oportunidad.Cómo enlazar DropDownList en Gridview con datos NOT desde gridview
Estoy intentando vincular un ddl con datos dentro de una vista de cuadrícula que NO proviene de la vista de cuadrícula. Esto está dentro de EditItemTemplate. El propósito de hacerlo es dar al usuario, para comenzar, un valor seleccionado y una serie de otros valores de un procedimiento almacenado de búsqueda.
Mencionare aquí que he hecho esto con éxito antes pero usando un ObjectDataSource. Estoy tratando de evitar eso esta vez y hacerlo completamente desde el código de atrás por ahora, luego moverlo a una capa de datos más tarde.
Esto es lo que tengo hasta ahora ...
<asp:GridView ID="usersGrid" runat="server"
DataKeyNames="userID"
AutoGenerateColumns="false" Width="580"
OnRowUpdating="usersGrid_RowUpdating"
OnRowEditing="usersGrid_RowEditing"
OnRowCancelingEdit="usersGrid_RowCancelingEdit" OnRowDeleting="usersGrid_RowDeleting"
>
...
<EditItemTemplate>
<div class="gridName">
<asp:TextBox ID="txtFirstName" Text='<%#Eval("firstName") %>' runat="server" Width="95" />
</div>
<div class="gridName">
<asp:TextBox ID="txtLastName" Text='<%#Eval("lastName") %>' runat="server" Width="95" />
</div>
<div class="gridEmail">
<asp:TextBox ID="txtEmail" Text='<%#Eval("email") %>' runat="server" Width="245" />
</div>
<div class="gridName">
<asp:DropDownList ID="ddl_GetLists"
DataSourceID="GetListData()"
AppendDataBoundItems="true"
DataValueField="listID"
DataTextField="listName"
SelectedValue='<%#Bind("listID") %>'
runat="server"
>
</asp:DropDownList>
</div>
</EditItemTemplate>
....
Protected Sub usersGrid_RowEditing(ByVal sender As Object, ByVal e As GridViewEditEventArgs)
usersGrid.EditIndex = e.NewEditIndex
BindData()
End Sub
....
Private Sub BindData()
Dim conn As New SqlConnection(connectionString)
Dim ad As New SqlDataAdapter("MAINT_DIST_GET_USERS", conn)
Dim ds As New DataSet()
ad.Fill(ds)
GetListData()
usersGrid.DataSource = ds
usersGrid.DataBind()
End Sub
Estoy incluyendo los últimos dos y otros enfoques que probé y fallé.
...
Protected Sub usersGrid_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
If e.Row.RowState = DataControlRowState.Edit Then
Dim ddl As DropDownList = DirectCast(e.Row.FindControl("ddl_GetLists"), DropDownList)
Dim conn As New SqlConnection(connectionString)
Dim ad As New SqlDataAdapter("MAINT_DIST_GET_LISTS", conn)
Dim ds As New DataSet()
ad.Fill(ds)
ddl.DataSource = ds
ddl.DataBind()
End If
End Sub
Public Function BindDropdown() As DataSet
Dim conn As New SqlConnection(connectionString)
Dim ad As New SqlDataAdapter("MAINT_DIST_GET_LISTS", conn)
Dim ds As New DataSet()
ad.Fill(ds)
ddl_GetLists.DataSource = ds
ddl_GetLists.DataBind()
End Function
También voy a preguntar por qué, en la función final, ¿por qué es el control, ddl_GetLists, no se reconoce así? Dentro de la grilla, desaparece del diseñador, pero vuelve a aparecer fuera de la grilla.
Gracias a todos por su ayuda.
que he hecho con éxito algo similar a esto usando un ObjectDataSource en el pasado, pero estoy tratando de hacer esto exclusivamente del código detrás de este tiempo. es posible? –
Sí, definitivamente. Dame un segundo y actualizaré mi respuesta. –
Con respecto a la propiedad ConnectionStrings. La aplicación que me asignaron para agregar utiliza una clave en appSettings en lugar del atributo de conexión de línea normal del archivo de configuración. ¿Hay alguna manera de invocarlo desde sqldatasource? –