Metà della battaglia di ottenere una risposta è sapere come fare la domanda. Non sono certo che sto facendo un buon lavoro, ma questo è il mio colpo migliore.Come associare DropDownList in GridView con dati non da GridView
Sto cercando di associare un ddl con i dati all'interno di un gridview che NON proviene dal gridview stesso. Questo è all'interno di EditItemTemplate. Lo scopo è di dare all'utente, per iniziare, un valore selezionato e una serie di altri valori da una procedura di ricerca memorizzata.
Qui dirò che l'ho fatto con successo ma utilizzando un oggetto ObjectDataSource. Sto cercando di evitarlo questa volta e farlo interamente dal codice sottostante per ora quindi spostarlo in un livello dati in seguito.
Ecco quello che ho finora ...
<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
Includo gli ultimi due e altri approcci che ho provato e fallito.
...
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
Sarò anche chiedere perché, nella funzione finale, perché è il controllo, ddl_GetLists, non riconosciuto come bene? All'interno della griglia scompare dal progettista ma al di fuori della griglia riappare.
Grazie a tutti per il vostro aiuto.
Ho fatto con successo qualcosa di simile a questo tramite un ObjectDataSource in passato, ma sto cercando di fare questo esclusivamente dal codice di questo periodo. È possibile? –
Sì, sicuramente. Dammi un secondo e aggiornerò la mia risposta. –
Riguardo alla proprietà ConnectionStrings. L'app che mi è stata assegnata per l'aggiunta utilizza una chiave in appSettings invece del normale attributo connectiontring dal file di configurazione. C'è un modo per chiamarlo da sqldatasource? –