Settare un item in una dropdownlist

venerdì 01 dicembre 2006 - 14.19

Opeth Profilo | Newbie

Ciao ragazzi. Ho un problema con una dropdownlist.
Nella templatecolumn di un datagrid ho inserito una dropdownlist come edititemtemplate. La ddl ha come datasource un dataset contenente le tabelle categorie e sottocategorie (tra di loro relazionate tramite l'idcategoria) e come datamember ha la tabella categorie. Come datatextfield ha il campo descrizione della tabella categorie e come datavaluefield deve avere il valore di idcategoria presente nella tabella sottocategorie. Spero di essere stato abbastanza chiaro.
Ad ogni modo, al caricamento della pagina, la categoria viene visualizzata correttamente in una label, ma quando clicco su edit, compare la ddl che mostra correttamente la voce recuperata dal db, ma non è riempita correttamente, in quanto la voce che le do' in pasto io va a sovrascrivere una già presente nella lista. In altre parole, ad esempio se la tabella categorie ha 4 voci e ad esempio dal db risulta selezionata la terza voce, allora la ddl avrà si 4 voci ma risulterà che la prima e la terza sono uguali.
Ora vi posto il codice:
HTML:
(...)
<asp:datagrid id=dgSottocategorie runat="server" DataSource="<%# Datasetsottocat1 %>" AutoGenerateColumns="False" DataKeyField="IDSottoCategoria" DataMember="sottocategorie">
<Columns>
(...)
<asp:TemplateColumn HeaderText="Categoria">
<ItemTemplate>
<asp:Label id="lblcat" Runat="server"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:dropDownList id=dropcategorie DataMember="categorie" DataSource="<%# Datasetsottocat1 %>" Runat="server" DataValueField="IDCategoria" DataTextField="Descrizione">
</asp:dropDownList>
</EditItemTemplate>
</asp:TemplateColumn>
(...)
</Columns>
</asp:datagrid>

VB
Private Sub dgSottocategorie_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dgSottocategorie.ItemDataBound
If e.Item.ItemType = ListItemType.EditItem Then
Dim idcat As String
Dim drcat As DataRow
idcat = Datasetsottocat1.sottocategorie(e.Item.ItemIndex)("idcategoria")
drcat = Datasetsottocat1.categorie.FindByIDCategoria(idcat)
Dim dropcategorietemp As DropDownList = CType(e.Item.FindControl("dropcategorie"), DropDownList)
dropcategorietemp.SelectedItem.Text = drcat("Descrizione")
dropcategorietemp.SelectedItem.Value = idcat
End If
End Sub

micto27 Profilo | Senior Member

>Private Sub dgSottocategorie_ItemDataBound(ByVal sender As Object,
>ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles
>dgSottocategorie.ItemDataBound
>If e.Item.ItemType = ListItemType.EditItem Then
>Dim idcat As String
>Dim drcat As DataRow
>idcat = Datasetsottocat1.sottocategorie(e.Item.ItemIndex)("idcategoria")
>drcat = Datasetsottocat1.categorie.FindByIDCategoria(idcat)
>Dim dropcategorietemp As DropDownList = CType(e.Item.FindControl("dropcategorie"),
>DropDownList)
>dropcategorietemp.SelectedItem.Text = drcat("Descrizione")
>dropcategorietemp.SelectedItem.Value = idcat
>End If
>End Sub

Da una prima occhiata al codice sembrerebbe che tu, anzichè selezionare l'elemento del DropDownList
relativo a "idcategoria", vada a sovrascrivere Value e Text dell'elemento correntemente selezionato
(SelectedItem).

Io farei così:

dropcategorietemp.Items.FindByValue(idcat).Selected = True

Ciao, Michele

Opeth Profilo | Newbie

Grazie Michele, avevo già trovato una soluzione, ma sicuramente la tua è più efficiente.
Giusto a titolo di cronaca, avevo risolto così:

Private Sub dgSottocategorie_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dgSottocategorie.ItemDataBound

Dim idcat As String

If e.Item.ItemType = ListItemType.EditItem Then
idcat = Datasetsottocat1.sottocategorie(e.Item.ItemIndex)("idcategoria")
Dim dropcategorietemp As DropDownList = CType(e.Item.FindControl("dropcategorie"), DropDownList)
dropcategorietemp.Items.FindByValue(idcat).Selected = True
Dim li1 As ListItem
For Each li1 In dropcategorietemp.Items
If li1.Value = idcat Then
li1.Selected = True
End If
Next
end if

end sub
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5