348 messaggi dal 10 marzo 2013
Sicuramente sono un po' tonto e non ci arrivo in nessun modo.

Ho ridotto il progetto ai minimi termini, ma il risultato è sempre lo stesso.


ti posto il codice:

Questo è VB


Imports System
Imports System.Data
Imports System.Data.SqlClient
Public Class WebForm1
Inherits System.Web.UI.Page

Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings(1).ConnectionString)

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

End Sub

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim cmdIns As SqlCommand
Dim strIns As String

strIns = "Insert T_Prova ("
strIns = strIns & "Tipo"
strIns = strIns & ",Nome"
strIns = strIns & ")VALUES("
strIns = strIns & "@Tipo"
strIns = strIns & ",@Nome"
strIns = strIns & ")"
cmdIns = New SqlCommand(strIns, conn)
cmdIns.Parameters.Add("Tipo", SqlDbType.VarChar).Value = DrpTipoAffiliato.Text
cmdIns.Parameters.Add("Nome", SqlDbType.VarChar).Value = DrpDescrizioneaff.Text
conn.Open()
cmdIns.ExecuteNonQuery()
conn.Close()
Response.Redirect("WebForm1.aspx")
End Sub



Protected Sub DrpIdAffiliato_SelectedIndexChanged(sender As Object, e As EventArgs)
DrpDescrizioneaff.SelectedValue = DrpIdAffiliato.SelectedValue
DrpTipoAffiliato.SelectedValue = DrpIdAffiliato.SelectedValue
DrpIdAffiliato.SelectedValue = DrpDescrizioneaff.SelectedValue
End Sub

Protected Sub DrpDescrizioneaff_SelectedIndexChanged(sender As Object, e As EventArgs)
DrpIdAffiliato.SelectedValue = DrpDescrizioneaff.SelectedValue
DrpTipoAffiliato.SelectedValue = DrpDescrizioneaff.SelectedValue
End Sub

Protected Sub DrpTipoAffiliato_SelectedIndexChanged(sender As Object, e As EventArgs)
DrpIdAffiliato.SelectedValue = DrpTipoAffiliato.SelectedValue
DrpDescrizioneaff.SelectedValue = DrpTipoAffiliato.SelectedValue
End Sub

End Class




Codice ASP

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="Prova_C.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="DrpIdAffiliato" runat="server" AutoPostBack="True" DataSourceID="Prova" DataTextField="IdAffiliato" DataValueField="IdAffiliato" OnSelectedIndexChanged="DrpIdAffiliato_SelectedIndexChanged" ></asp:DropDownList>
<asp:SqlDataSource ID="Prova" runat="server" ConnectionString="<%$ ConnectionStrings:EsaWebConnectionString1 %>" SelectCommand="SELECT [IdAffiliato], [Sigla], [Descrizione] FROM [T_Affiliati]"></asp:SqlDataSource>
<asp:DropDownList ID="DrpDescrizioneaff" runat="server" AutoPostBack="True" DataSourceID="Prova" DataTextField="Descrizione" DataValueField="Descrizione" OnSelectedIndexChanged="DrpDescrizioneaff_SelectedIndexChanged" ></asp:DropDownList>
<asp:DropDownList ID="DrpTipoAffiliato" runat="server" AutoPostBack="True" DataSourceID="Prova" DataTextField="Sigla" DataValueField="Sigla" OnSelectedIndexChanged="DrpTipoAffiliato_SelectedIndexChanged" ></asp:DropDownList>
</div>
<asp:Button ID="Button1" runat="server" Height="26px" Text="Salva" Width="237px" />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="IdAffiliato" DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="IdAffiliato" HeaderText="IdAffiliato" InsertVisible="False" ReadOnly="True" SortExpression="IdAffiliato" />
<asp:BoundField DataField="Tipo" HeaderText="Tipo" SortExpression="Tipo" />
<asp:BoundField DataField="Nome" HeaderText="Nome" SortExpression="Nome" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:EsaWebConnectionString1 %>" SelectCommand="SELECT * FROM [T_Prova]"></asp:SqlDataSource>
</form>
</body>
</html>



Ora Riesco a scrivere nella tabella come dico io, ma non mi popola piu' le DDL dianicamente, mi da ancora l'errore :

SelectedValue in 'DrpDescrizioneaff' non valido, poiché non è incluso nell'elenco di elementi.
11.886 messaggi dal 09 febbraio 2002
Contributi
ok, grazie, ora ho capito il problema. La riga è questa:

Oiram ha scritto:
DrpDescrizioneaff.SelectedValue = DrpIdAffiliato.SelectedValue


Guarda i DataValueField che hai assegnato a queste dropdownlist.
  • Per DrpDescrizioneaff è "Descrizione". Vuol dire che i valori dei suoi elementi saranno letti dal campo "Descrizione" della tabella T_Affiliati, e saranno perciò delle stringhe.
  • Per DrpIdAffiliato è "IdAffiliato". Vuol dire invece che saranno dei numeri.

Dunque la prima dropdownlist è ripiena di stringhe, mentre la seconda è ripiena di numeri. Ne consegue che questa istruzione fallisce:
DrpDescrizioneaff.SelectedValue = DrpIdAffiliato.SelectedValue
Infatti, se il SelectedValue di DrpIdAffiliato è per esempio "5", non puoi assegnarlo al SelectedValue di DrpDescrizioneaff che non contiene quel valore, perché contiene invece stringhe tipo "Affiliato A", "Affiliato B" e così via.

Devi cambiare gli attributi DataValueField di tutte e tre le dropdownlist in modo che siano tutte impostate su "IdAffiliato".
DataValueField="IdAffiliato"


ciao,
Moreno
Modificato da BrightSoul il 17 agosto 2014 09.08 -

Enjoy learning and just keep making
348 messaggi dal 10 marzo 2013
Moreno
grazie 1000 per l'aiuto. mi rendo conto che ti sto rompendo i cosi detti
ma siete gli unici a darmi delle soluzioni concrete.

Cosi facendo pero' ottengo che nel database anziche' la sigla, venga scritto l'id della sigla, anziche' il valore che mi interessa ( SP, ICP, COLL).
In questo modo i dati presenti nella listView che hanno come valore tipo affiliato una stringa e non un numero, non vengono bindati, e ottengo lo stesso errore.

Mentre con l'altra situazione con quella errata che ho scritto io, le dropdownlist non si popolano dinamicamente, ma scrive il valore che mi interessa.
Ora io sono certo del fatto che ci sia una combinazione ma non riesco a concepirla.

Grazie ancora.
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Mario,

Oiram ha scritto:

Cosi facendo pero' ottengo che nel database anziche' la sigla, venga scritto l'id della sigla, anziche' il valore che mi interessa ( SP, ICP, COLL).

Fa niente, adesso risolviamo anche questo. La cosa essenziale, fino a questo punto, era che la pagina non andasse più in errore.

Vediamo come recuperare la sigla anziché il suo ID.
Mi sembra di capire che la dropdownlist che porta la sigla sia questa.
<asp:DropDownList ID="DrpTipoAffiliato" runat="server" AutoPostBack="True" DataSourceID="Prova" DataTextField="Sigla" DataValueField="IdAffiliato" OnSelectedIndexChanged="DrpTipoAffiliato_SelectedIndexChanged" ></asp:DropDownList>

Quando è il momento di inserire i dati nel db, non usare DrpTipoAffiliato.SelectedValue, ma usa invece DrpDescrizioneaff.SelectedItem.Text, in modo da accedere al testo, cioè alla sigla stessa.

Se per l'aggiornamento stai usando un SqlDataSource, allora non lo legare alla dropdownlist (perché prenderebbe l'id anziché la sigla) ma lega il campo un asp:HiddenField, di cui valorizzerai la proprietà Value con il valore ottenuto da DrpDescrizioneaff.SelectedItem.Text, durante il SelectedIndexChanged.
Protected Sub DrpTipoAffiliato_SelectedIndexChanged(sender As Object, e As EventArgs)
DrpIdAffiliato.SelectedValue = DrpTipoAffiliato.SelectedValue
DrpDescrizioneaff.SelectedValue = DrpTipoAffiliato.SelectedValue
TuoHiddenField.Value = DrpTipoAffiliato.SelectedItem.Text
End Sub


ciao,
Moreno

Enjoy learning and just keep making
348 messaggi dal 10 marzo 2013
Moreno, dammi il tuo indirizzo che ti mando una bottiglia di vino.
Se vieni in Sardegna dalle mie parti(Olbia) sei ospite mio e di mia moglie a cena o pranzo fai tu. Se vuoi porta la famiglia, fidanzata figli moglie amante, quello che vuoi.
Grazie 1000 risolto.
11.886 messaggi dal 09 febbraio 2002
Contributi
hehe :) grazie a te per l'invito, sei molto gentile. Il contributo degli utenti nel forum è completamente volontario, non c'è bisogno di alcun tipo di compenso. Anzi, se girando per il forum ti capita di trovare qualche domanda a cui sai rispondere, rispondi pure. Puoi contribuire così, aiutando qualcun altro :)

ciao,
Moreno

Enjoy learning and just keep making
348 messaggi dal 10 marzo 2013
Ci tenevo ad esprimerti la mia gratitudine.
Fatte un lavoro eccezionale.
Grazie ancora.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.