Problema con il DropDownList

venerdì 05 settembre 2008 - 17.57

Ondatem Profilo | Newbie

Un saluto a tutta la comunità.
Ho realizzato una web form per raccogliere dei dati di alcuni utenti.
Per la creazione della pagina ho usato un update panel con dentro diversi textbox e un drop down list contenete diversi campi da selezionare. In fondo alla pagina ho messo un button che una volta cliccato innesca tutta una serie di processi che vanno a leggere i valori delle textbox e del campo del drop down list selezionato.

Il problema è questo: Indipendentemente dal valore che seleziono il valore letto sul drop downl list è sempre il primo della lista.

per leggere il valore uso la proprietà selectedItem, ma niente da fare. il valore letto è sempre il primo
ES: dim Indirizzo as string=Me.dropdownlist.selectedItem.text

Qualcuno di voi può darmi un consiglio?

Grazie in anticipo per qualsiasi suggerimento.

balfaz Profilo | Expert

inviami un po di codice perchè non ti ho capito molto bene, magari ti posso dare una mano
"Ci sono due tipi di pazzi, quelli che dicono pazzie e quelli che le fanno diventare una realtà."

Ondatem Profilo | Newbie

Ecco qua un pezzo di codice. Spero possa essere chiaro

Codice Html della pagina:

<asp:UpdatePanel ID="up1" runat="server">
<ContentTemplate>

<div id="dvDDL">
<asp:Label ID="Scritta1" runat="server" CssClass="lblScritta1" /><br />
<asp:Label ID="Scritta2" runat="server" CssClass="lblScritta2" />

<asp:DropDownList id="mioDDL" runat="server">
</asp:DropDownList
</div>

<div id="dvDatiCliente">
<asp:Label ID="lblTitNomeCliente" runat="server" CssClass="lblTitNomeCli /><br />
<asp:TextBox ID="txtNomeCli" MaxLength="30" runat="server" CssClass="txtNomeCLi" /><br />
</div>

ALTRI OGGETTI DELLA PAGINA (TUTTI TEXTBOX E LABEL)

<div id="dvPulsante">
<asp:Button ID="btnConferma" runat="server" />
</div>
</ContentTemplate>
</asp:UpdatePanel>


CODICE VB.NET DELLA PAGINA
Protected Sub btnConferma_Click(.......)

DIM NomeCli as string=Me.=txtNomeCli.text
dim valoreDDL=Me.mioDDL.SelectedItem.Text

Più altro codice per leggere tutti gli altri textbox

End Sub

balfaz Profilo | Expert

tu usi l'evento load della pagina?,
se fosse SI allora
controlla l'evento postback della pagina e usa "if NOT page.ispostback",
Altrimenti
controlla la procedura dove fai la carica dei dati nel DDL
altrimenti
fammi sapere
FinSI
sembra un algoritmo ma non era la mia intenzione (questa sporca abitudine)

"Ci sono due tipi di pazzi, quelli che dicono pazzie e quelli che le fanno diventare una realtà."

Ondatem Profilo | Newbie

Si sfrutto l'evento load della pagina per caricare i dati nel dropdownlist

Il consiglio che mi hai dato è sicuramente valido. Infatti senza controllare l'evento postaback una volta che si clicca il pulsante vengono riassociati tutti i dati al drop down list e di consegenza viene persa la selezione.

Quindi Ho provato a fare come mi hai detto ma ci sono ancora problemi :Quando vado a prendere il valore selezioanto è sempre nullo.

ti posto il codice che ho scritto:
Nel page Load ho inserito queste istruzioni:

If Not Page.IsPostBack Then
Me.mioDDL.DataSource = LeggiValori()
Me.mioDDL.DataBind()
End if

LeggiValori è una funzione che mi ritorna un arraylist correttamente popolato con i valori da associare. Ho controllato la funzione in debug più volte e funziona correttamente.

balfaz Profilo | Expert

mi faresti la cortesia di postare un po di codice, un po più dettagliato, cosi posso fare due prove per riuscire ad aiutarti

comunque puoi fare un'altra prova, inserisce la riga
dim DDLX as dropdownlist = ctype(Upl.findcontrol("TUO_DDL"), dropdownlist)
dopodichè fai il cast al controllo appena creato "DDLX.selecteditem.text "

vediamo un pò,

comunque ricorda la mia richiesta. Ciao

Ondatem Profilo | Newbie

Ho provato a fare anche questa prova ma niente.
Per fare un ulteriore test ho creato un altro progetto con visual studio e scriveNDO le istruzioni precedenti funziona tutto perfettamente.
Questo è il progetto di prova che ho fatto:

CODICE HTML
<%@ Page Language="VB" AutoEventWireup="true" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div>
&nbsp;
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
<asp:Button ID="Button1" runat="server" Text="Button" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>

CODICE VBNET

Partial Class _Default
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox(Me.DropDownList1.SelectedValue)
End Sub

Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
Dim listini As ArrayList = New ArrayList
listini.Add("001")
listini.Add("002")
listini.Add("003")
Me.DropDownList1.DataSource = listini
Me.DropDownList1.DataBind()
End Sub

End Class


A questo punto mi chiedo se ci sia qualche impostazione a livello di pagina o sul web.config SUL MIO PROGETTO che possa in qualche modo interferire con gli eventi o con l'oggetto. Ti viene pensato niente?

Ondatem Profilo | Newbie

Ho risolto il problema!!!

Sulla pagina aspx dove ho il dropdownlist ho inserito sul campo page l'attributo EnabledViewState="true" Di seguito riporto un esempio:

<%@ Page Language="VB" AutoEventWireup="true" CodeFile="Default2.aspx.vb" Inherits="Default2" EnableViewState="true"%>

La cosa è risolta però mi sfugge ancora il perchè senza questo attributo il dropdownlist non funziona correttamente, visto che sul progetto di prova che avevo fatto comunque, senza inserire l'attributo tutto funzionava perfettamente.

Se sai il motivo fammi sapere, sennò non ti preoccupare che tanto il problema è risolto.

Grazie ancora per la disponibilità

Ondatem Profilo | Newbie

Bisognava inserire l'attributo enabledviewstate=true perchè sul web.config era settato uguale a false.

A questo punto o si corregge il web.config o si inserisce l'attributo a livello di pagina.

Un saluto a tutta la comunitaà
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