54 messaggi dal 07 aprile 2005
ciao a tutti
avrei bisogno di modificare un campo di una gridview da textbox a dropdownlist, mostrando (questo è il punto) come selezionato il record sul quale l'utente sta lavorando ma offrendogli l'opportunità di modificarlo selezionando un'altro valore dalla dropdownlist.

riporto lo stringatissimo esempio pratico:

<asp:SqlDataSource id="tutti_agenda"
ConnectionString="<%$ ConnectionStrings:mydb%>"
SelectCommand="<%$ Resources:LocalizedText, sp_sel_agenda_tutti %>"
Runat="server" />

asp:gridview id="gridview1" runat="server" allowpaging="true" DataSourceID="tutti_agenda" DataKeyNames="agenda_id" PageSize="5" AutoGenerateDeleteButton="false" AutoGenerateEditButton="false" AllowSorting="True" AutoGenerateColumns="false">
<columns>
<asp:TemplateField HeaderText="Foto">
<EditItemTemplate>

asp:textbox id="Foto" Width="70px" Text='<%# Bind("img") %>' Runat="Server" />

</EditItemTemplate>
</asp:TemplateField>
</columns>
</gridview>

e fin qui... tutto ok
la parte da modificare è quella racchiusa tra i tag EditItemTemplate

al posto del textbox inserisco la drop..

<EditItemTemplate>

asp:SqlDataSource id="sqlfoto"
SelectCommand="SELECT DISTINCT img FROM agenda" Runat="server"
ConnectionString="<%$ ConnectionStrings:mydb %>" />

<asp:dropdownlist ID="listafoto" DataSourceid="sqlfoto" DataTextField="img" runat="server" />

</EditItemTemplate>

in questo modo mi compare in evidenza nella drop il primo record in ordine alfabetico
vorrei invece che fosse selezionato il campo "img" relativo al record attualmente selezionato dalla gridview1

mi pare di capire che questo non possa essere fatto dichiarativamente: è necessario usare una sub chiamata dal metodo ondatabinding della drop?

in tal caso sarebbe possibile avere un esempio.. preferibilmente in VB?

spero di essere stato suffientemente chiaro: grazie in anticipo per l'eventuale aiuto

Luca
luc_asp wrote:
al posto del textbox inserisco la drop..

che deve essere

<asp ropdownlist ID="listafoto" DataSourceid="sqlfoto" DataTextField="img" SelectedValue='<%# Eval("campo")%>' runat="server" />

dove campo è il nome del campo del db da cui estrarre il valore

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
71 messaggi dal 29 novembre 2005
prova a dare un'occhiata qui.

http://beta.asp.net/QuickStart/default.aspx

più precisamente
esempio
http://66.129.71.130/QuickStartv20/aspnet/samples/data/GridViewDropDownList_vb.aspx
sorgente
http://66.129.71.130/QuickStartv20/util/srcview.aspx?path=~/aspnet/samples/data/GridViewDropDownList.src&file=GridViewDropDownList_vb.aspx
Modificato da diska il 07 febbraio 2006 10.27 -
54 messaggi dal 07 aprile 2005
grazie Daniele,
per quale motivo IntelliSense non mostra la proprietà <i>SelectedValue</i> della dropdownlist?
luc_asp wrote:
per quale motivo IntelliSense non mostra la proprietà SelectedValue della dropdownlist?

probabilmente perchè in genere lo si fa da codice e forse nello schema non l'hanno messo volutamente.
btw, io l'intellisense me lo sono fatto installare nella mia ROM personale (aka memoria) e di problemi finora non ne ho mai avuti

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
54 messaggi dal 07 aprile 2005
approfitto della tua cortesia per un nuovo suggerimento sulla stessa drop

ho modificato

SelectedValue='<%# Eval("img")%>'

in

SelectedValue='<%# Bind("img")%>'

dato che ho necessità di aggiornare il record a db in base alla selezione

e fin qui ci siamo

dato inoltre che sarebbe simpatico poter visualizzare le immagini disponibili semplicemente scorrendo la drop in una

asp:Image ID="Image2" Width="70px" Runat="Server"
AlternateText='<%# "Picture of " & Eval("img") %>'
ImageUrl='<%# "/images/" & Eval("img") %>'/>

ho aggiunto un controllo a OnSelectedIndexChanged per ricaricare la gridview in base alla semplice selezione sulla drop, in modo da mostrare l'immagine in tempo reale corrispondente

<asp:dropdownlist ID="listafoto" DataSourceid="sqlfoto" DataTextField="img" SelectedValue='<%# Bind("img")%>' runat="server" Font-Size="Smaller" OnSelectedIndexChanged="gridview1_rebind" />

e

Sub gridview1_rebind(ByVal sender As Object, ByVal e As System.EventArgs)
gridview1.DataBind()
End Sub

ma...

Server Error in '/' Application.
<i>Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation. </i>

però, se imposto EnableEventValidation="false" in @Page è vero che la segnalazione di errore scompare, ma è altrettanto vero che l'update sulla grid non funziona più, ne' viene eseguita la sub che dovrebbe aggiornare l'immagine cliccando un diverso record della drop.
luc_asp wrote:
approfitto della tua cortesia per un nuovo suggerimento sulla stessa drop
ho modificato

SelectedValue='<%# Eval("img")%>'

in

SelectedValue='<%# Bind("img")%>'

dato che ho necessità di aggiornare il record a db in base alla selezione
e fin qui ci siamo

sbagli approccio, secondo me, perchè nel tuo caso è molto meglio Javascript, altrimenti diventa inutilizzabile la pagina.

una roba tipo:

<img src="" id="<%#eval("img")%>_img" />

con un evento javacript assegnato al cambio di selezione nella dropdownlist, che passi ID e relativo valore ad una funzione JS così fatta: function changeImg(id, newUrl)
{
document.getElementById(id).src = newUrl;
}

l'effetto è quello di ricaricare solo l'immagine e non tutta la pagina, ogni volta.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
54 messaggi dal 07 aprile 2005
il ragionamento non fa una piega
probabilmente non mi è venuto in mente perchè non sono in grado di implementarlo

<script type="text/javascript">
function changeImg(id, newUrl)
{
document.getElementById(id).src = newUrl;
}
</script>

<asp:dropdownlist ID="listafoto" DataSourceid="sqlfoto" DataTextField="img" SelectedValue='<%# Bind("img")%>' runat="server" OnSelectedIndexChanged='changeImg(<%#eval("img")%>_img" />, <%# "/images/" & Eval("img") %>)' />

<img alt="" src="" id='<%#eval("img")%>_img'/>


risultato:
<i>Compilation Error</i>
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: BC30456: 'changeImg' is not a member of 'ASP.adm_gestione_agenda_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.