Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    12

    DropDownList in un ItemTemplate

    Ciao a tutti! Sono nuova nella programmazione in asp.net, mi sono scontrata con un problema e avrei bisogno di un aiuto.
    Nella mia pagina ho una DetailsView che contiene un template: una dropdown list che viene popolata utilizzando un datasource.
    Ecco il codice:

    <asp:TemplateField>
    <EditItemTemplate>
    <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="DSImages" DataTextField="NOME" DataValueField="ID" SelectedValue='<%# Bind("immagine") %>'>
    </asp:DropDownList>
    <asp:AccessDataSource ID="DSImages" runat="server" DataFile="~/App_Data/images.mdb" SelectCommand="SELECT * FROM [IMMAGINI]"></asp:AccessDataSource>
    </EditItemTemplate>
    </asp:TemplateField>

    Il mio problema è questo: ho bisogno di eseguire un'azione (riempire una casella di testo) nel quando viene selezionato un elemento della dropdown list.
    Ho provato ad usare OnSelectedIndexChanged, ma non funziona, infatti sembra non recepire l'evento di selezione sulla dropdown.
    Qualcuno di voi ha già affrontato questo problema?

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    12
    Ho trovato, non era niente di complesso... bastava usare
    AutoPostBack="True"
    e OnSelectedIndexChanged funziona

  3. #3
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    scusatemi, approfitto per rendere pubblica la soluzione ad un piccolo problema comune, ossia come usare una dropdownlist in un EditItemTemplate con Asp.Net 1.1. L'esempio e' pensato per due tabelle, tbUtenti e tbGruppi (un tipico raggruppamento tipologico di utenti). La prima, tra gli altri campi, ha un riferimento <idgruppo> e la seconda ha due campi, <id> e <descrizione> :

    codice:
    <%@ Page Language="VB" %>
    
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.Sqlclient" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    
    <script runat="server">
        Dim ConnStr As String = ConfigurationSettings.AppSettings("strconn_db")
    
        Sub Page_Load(ByVal s As Object, ByVal e As EventArgs)
            If Not IsPostBack Then
                BindGrid()
            End If
        End Sub
          
        Sub BindGrid()
            Dim SQL As String = "SELECT * FROM TBUTENTI"
            Dim DA As SqlDataAdapter = New SqlDataAdapter(SQL, ConnStr)
            Dim DS As New DataSet
            DA.Fill(DS, "utenti")
            DataGrid1.DataSource = DS.Tables("utenti").DefaultView
            DataGrid1.DataBind()
        End Sub
          
        Private Sub DataGrid1_EditCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs)
            DataGrid1.EditItemIndex = e.Item.ItemIndex
            BindGrid()
        End Sub
          
        
        Private Sub DataGrid1_CancelCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs)
            DataGrid1.EditItemIndex = -1
            BindGrid()
        End Sub
    
        
        Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs)
            If e.Item.ItemType = ListItemType.EditItem Then
                Dim DRV As DataRowView = CType(e.Item.DataItem, DataRowView)
                Dim CurrentGruppo As String = Vgruppo(DRV("idgruppo"))
    
                Dim DDL As DropDownList = CType(e.Item.Cells(6).Controls(1), DropDownList)
                
                ' Faccio un dataset con id e desc dei gruppi
                Dim SQL As String = "SELECT id, descrizione FROM tbGruppi ORDER BY ID"
                Dim DA As SqlDataAdapter = New SqlDataAdapter(SQL, ConnStr)
                Dim DS As New DataSet
                Dim item As New ListItem
                DA.Fill(DS, "gruppi")
              
                ' Popolo la drop
                DDL.DataSource = DS.Tables("gruppi").DefaultView
                DDL.DataTextField = "descrizione"
                DDL.DataValueField = "id"
                DDL.DataBind()
              
                ' Mi posiziono sull'item del record...
                item = DDL.Items.FindByText(CurrentGruppo)
                If Not item Is Nothing Then item.Selected = True
            End If
        End Sub
    
        ' ESEGUO L'AGGIORNAMENTO SUL DB
        Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs)
            Dim DDL As DropDownList = CType(e.Item.Cells(6).Controls(1), DropDownList)
            Dim idgruppo As Integer = DDL.SelectedValue
            Dim idutente As Integer = DataGrid1.DataKeys(e.Item.ItemIndex)
            Dim SQL As String = "UPDATE TBUTENTI SET IDGRUPPO=@IdGruppo WHERE ID=@Id"
            Dim Conn As SqlConnection = New SqlConnection(ConnStr)
            Dim Cmd As New SqlCommand(SQL, Conn)
            Cmd.Parameters.Add(New SqlParameter("@IdGruppo", idgruppo))
            Cmd.Parameters.Add(New SqlParameter("@Id", idutente))
            Conn.Open()
            Cmd.ExecuteNonQuery()
            Conn.Close()
            DataGrid1.EditItemIndex = -1
            BindGrid()
        End Sub
          
        Function Vgruppo(ByVal id As Integer) As String
            Dim SQL As String = "SELECT ID,DESCRIZIONE FROM TBGRUPPI WHERE ID=" & Convert.ToInt32(id)
            Dim DA As SqlDataAdapter = New SqlDataAdapter(SQL, ConnStr)
            Dim ds As New DataSet
            DA.Fill(ds, "id")
            Dim result As String
            result = Convert.ToString(ds.Tables(0).Rows(0).Item(1))
            Return result
        End Function
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Locali</title>
        <link href="../stile.css" type="text/css" rel="stylesheet">
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <asp:DataGrid Width="100%" ID="DataGrid1" runat="server" DataKeyField="ID" 
                AutoGenerateColumns="False"
                CellPadding="5" ShowHeader="true" ShowFooter="true" HeaderStyle-Font-Size="Small"
                FooterStyle-Font-Size="small" HeaderStyle-Height="8px" FooterStyle-Height="8px"
                BorderColor="#000000"
                BorderStyle="Double" OnUpdateCommand="DataGrid1_UpdateCommand" OnItemDataBound="DataGrid1_ItemDataBound"
                    OnEditCommand="DataGrid1_EditCommand" OnCancelCommand="DataGrid1_CancelCommand">
                    <Columns>
                        <asp:EditCommandColumn ItemStyle-HorizontalAlign="Center" HeaderText="Opzioni" HeaderStyle-Font-Bold="true"
                            HeaderStyle-HorizontalAlign="Center" EditText="Edita" CancelText="Cancella" UpdateText="Aggiorna" />
                        <asp:BoundColumn DataField="Campo1" HeaderText="Campo1" HeaderStyle-Font-Bold="true"
                            ReadOnly="True" />
                        <asp:BoundColumn DataField="Campo2" HeaderText="Campo2" HeaderStyle-Font-Bold="true"
                            ReadOnly="True" />
                        <asp:BoundColumn DataField="Campo3" HeaderText="Campo3" HeaderStyle-Font-Bold="true"
                            ReadOnly="True" />
                        <asp:BoundColumn DataField="Campo4" HeaderText="Campo4" HeaderStyle-Font-Bold="true"
                            ReadOnly="True" />
                        <asp:BoundColumn DataField="Campo5" HeaderText="Campo5" HeaderStyle-Font-Bold="true"
                            ReadOnly="True" />
    
                        <asp:TemplateColumn HeaderText="Gruppo">
                            <ItemTemplate>
                                <%#Vgruppo(Container.DataItem("idgruppo"))%>
                            </ItemTemplate>
                            <EditItemTemplate>
                                <asp:DropDownList runat="server" ID="ddgruppi" />
                            </EditItemTemplate>
                        </asp:TemplateColumn> 
                    </Columns>
                </asp:DataGrid>
            </div>
        </form>
    </body>
    </html>

    Naturalmente le istruzioni

    codice:
    CType(e.Item.Cells(6).Controls(1), DropDownList)
    cambiano in CType(e.Item.Cells(X).Controls(1), DropDownList
    secondo il num. di campi della tabella..

    spero di essere stato utile a qualcuno.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    12
    Interessante... per caso hai anche una versione in C#?

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    spiacente, il mio linguaggio per ora e' il basic...(anche se credo di abbandonarlo a breve) .. ci sono dei convertitori, tipo CsharpToVbConverter e viceversa

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.