11 messaggi dal 04 marzo 2008
Buonasera

al fine di imparare al meglio asp.net, stò ricostruendo un applicativo che avevo implementato in classic asp, e chiaramente, in quanto neofita di .net 2.0 stò riscontrando vari problemi.


Passo alla domanda

ho una Gridview, che viene popolata tramite un AccessDataSource. Quando vado in modalità EDIT, inserisco in una cella della GW una DDL che viene popolata da un secondo AccessDataSource.




il problema si pone quando, uan volta terminata la modifica dei vari campi, cliccando sull'apposito tasto che mi consente di apportare le modifiche, il sistema mi riporta il seguente errore :

Impossibile trovare il controllo 'DropDownList1' in ControlParameter 'DropDownList1'





vi posto tutto il codice:

  <asp:AccessDataSource ID="AccessDataSource1" runat="server" 
                    DataFile="~/App_Data/TCClub.mdb" 
                    DeleteCommand="DELETE FROM [ListinoAssoluto] WHERE [IdListinoAssoluto] = ?" 
                    InsertCommand="INSERT INTO [ListinoAssoluto] ([IdListinoAssoluto], [IdStruttura], [IdTipologiaCamera], [Prezzo], [NoteListino]) VALUES (?, ?, ?, ?, ?)" 
                    SelectCommand="SELECT [IdListinoAssoluto], [IdTipologiaCamera], [Prezzo], [NoteListino] FROM [ListinoAssoluto] WHERE ([IdListinoAssoluto] = ?)" 
                    UpdateCommand="UPDATE [ListinoAssoluto] SET  [IdTipologiaCamera] = ?, [Prezzo] = ?, [NoteListino] = ? WHERE [IdListinoAssoluto] = ?">
                    <SelectParameters>
                        <asp:QueryStringParameter Name="IdListinoAssoluto" QueryStringField="IdStr" Type="Int32" />
                    </SelectParameters>
                    <DeleteParameters>
                        <asp:Parameter Name="IdListinoAssoluto" Type="Int32" />
                    </DeleteParameters>
                    <UpdateParameters>
                        <asp:ControlParameter ControlID="DropDownList1" Name="DropDownList1" Type="Int32" />
                        <asp:Parameter Name="Prezzo" Type="Single" />
                        <asp:Parameter Name="NoteListino" Type="String" />
                        <asp:Parameter Name="IdListinoAssoluto" Type="Int32" />
                    </UpdateParameters>
                    <InsertParameters>
                        <asp:Parameter Name="IdListinoAssoluto" Type="Int32" />
                        
                        <asp:Parameter Name="IdTipologiaCamera" Type="Int32" />
                        <asp:Parameter Name="Prezzo" Type="Single" />
                        <asp:Parameter Name="NoteListino" Type="String" />
                    </InsertParameters>
                </asp:AccessDataSource>
                <asp:AccessDataSource ID="AccessDataSource2" runat="server" 
                    DataFile="~/App_Data/TCClub.mdb" 
                    SelectCommand="SELECT * FROM [TipologiaCamera]"></asp:AccessDataSource>
                <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                    DataKeyNames="IdListinoAssoluto" DataSourceID="AccessDataSource1">
                    <Columns>
                        <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
                        <asp:BoundField DataField="IdListinoAssoluto" HeaderText="IdListinoAssoluto" 
                            InsertVisible="False" ReadOnly="True" SortExpression="IdListinoAssoluto" />                         
                            <asp:BoundField DataField="IdTipologiaCamera" HeaderText="IdTipologiaCamera" SortExpression="IdTipologiaCamera" />
                        <asp:BoundField DataField="Prezzo" HeaderText="Prezzo" SortExpression="Prezzo" />
                        <asp:BoundField DataField="NoteListino" HeaderText="NoteListino" 
                            SortExpression="NoteListino" />
                            
                    <asp:TemplateField>
                    <EditItemTemplate>
                        <asp:DropDownList ID="DropDownList1" runat="server" 
                            DataSourceID="AccessDataSource2" DataTextField="NomeTipologiaCamera" 
                            DataValueField="IdTipologiaCamera" selectedvalue = '<%# eval("IdTipologiaCamera") %>'>
                        </asp:DropDownList>  
                    </EditItemTemplate>
                    </asp:TemplateField>
                    
                    </Columns>
                    
                    <EmptyDataTemplate>
                    Nessun Listino Creato
                    </EmptyDataTemplate>
                </asp:GridView>





mi sapreste dire cosa ho errato ?

Grazie anticipatamente

Marco
non devi aggiungere un ControlParameter, è sufficiente, sostituire

<asp:DropDownList ID="DropDownList1" runat="server"
DataSourceID="AccessDataSource2" DataTextField="NomeTipologiaCamera"
DataValueField="IdTipologiaCamera" selectedvalue = '<%# eval("IdTipologiaCamera") %>'>

con

<asp:DropDownList ID="DropDownList1" runat="server"
DataSourceID="AccessDataSource2" DataTextField="NomeTipologiaCamera"
DataValueField="IdTipologiaCamera" selectedvalue = '<%# Bind("IdTipologiaCamera") %>'>


dovrebbe essere sufficente

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
11 messaggi dal 04 marzo 2008
Ciao Nostromo

intanto ti ringrazio per la risposta che mi hai dato.

Il consiglio che mi hai dato tu ha avuto esito decisamente positivo, dal momento che la sostituzione è avvenuta tranquillamente e senza nessun errore.

Posto quindi il codice iniziale ERRATO :


 <UpdateParameters>
   <b><asp:ControlParameter ControlID="DropDownList1" Type="Int32" /></b>
   <asp:Parameter Name="Prezzo" Type="Single" />
   <asp:Parameter Name="NoteListino" Type="String" />
    <asp:Parameter Name="IdListinoAssoluto" Type="Int32" />
</UpdateParameters>


collegato con la DDL

<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="AccessDataSource2" DataTextField="NomeTipologiaCamera" 
DataValueField="IdTipologiaCamera" selectedvalue = '<%# eval("IdTipologiaCamera") %>'>
</asp:DropDownList>  


ed il codice modificato E FUNZIONANTE, in relazione al tuo suggerimento :

 <UpdateParameters>
<asp:Parameter Name="IdTipologiaCamera" Type="Int32" />
<asp:Parameter Name="Prezzo" Type="Single" />
<asp:Parameter Name="NoteListino" Type="String" />
<asp:Parameter Name="IdListinoAssoluto" Type="Int32" />
</UpdateParameters>


collegato alla DDL corretta

<asp:DropDownList ID="DropDownList1" runat="server" 
DataSourceID="AccessDataSource2" DataTextField="NomeTipologiaCamera" 
DataValueField="IdTipologiaCamera" selectedvalue = '<%# Bind("IdTipologiaCamera") %>'>


Approfitto della tua gentilezza per porti un'altra domanda:

Quale è la differenza fra BIND ed EVAL ?

Ho notato che se lascio EVAL, la pagina non mi genera errore, ma non mi consente di modificare il valore IdTipologiaCamera.

Intuisco che forse EVAL va bene per restituire valori che non devono essere modificati, ma che servono come riferimento chiave per effettuare le modifiche (come l'ID Chiave Primaria di una tabella di un DB).

Attendo tua risposta.

Grazie

Marco
hai intuito bene, con Bind abiliti il Binding bidirezionale, ovvero oltre che a visualizzare i dati puoi trasferire le modifiche fatte dall'utente alla fonte dati.

se non lo hai già fatto dai un occhiata agli articoli su aspitalia

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx

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.