DropDownList da javascript

lunedì 05 ottobre 2009 - 20.12

venzo Profilo | Junior Member

Con lo script riportato riesco a popolare da un popup campi textbox sulla pagina aperta denominata form1.
ScriptManager.RegisterClientScriptBlock(Me, GetType(Page), "close", "<script>opener.document.forms('forms1').elements('Cliente').Value='" + sValore + "';javascript:window.close();</script>", False)
Vorrei poter scrivere anche in un dropdown: ricavando il nome del cliente da una tabella, vorrei posizionare il DropDownList di una form, sul nome ricavato.

Gluck74 Profilo | Guru

potresti spiegare un pochino meglio cosa vuoi fare?
il dropdown lo vuoi gestire lato server? lato client dopo una chiamata ajax?
non ho capito

Gluck74 Profilo | Guru

potresti spiegare un pochino meglio cosa vuoi fare?
il dropdown lo vuoi gestire lato server? lato client dopo una chiamata ajax?
non ho capito

venzo Profilo | Junior Member

Nella pagina e' presente un dropdownlist popolato nella load della pagina.
Essendo il dropdownlist popolato con una tabella clienti molto grande, con un imagebutton apro un popup per la ricerca dei clienti con una gridview a paginazione. Quando seleziono il cliente desiderato, vorrei posizionare il dropdownlist sull'item specifico.

Gluck74 Profilo | Guru

IPOTESI:
la griglia ha come DataKey il codice del cliente,
la dropdownlist ha come valori i codici dei clienti
tutto si fa lato server.


protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { string codCliente = GridView1.SelectedValue.ToString(); ListItem li = DropDownList1.Items.FindByValue(codCliente); DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(li); }

venzo Profilo | Junior Member

Va bene; l'unica cosa è che il dropdownlist è su un'altra pagina asp. Per questo avevo chiesto l'intervento di javascript.

Gluck74 Profilo | Guru

scusa, non avevo letto bene. La griglia la apri con una popUp, quindi una pagina a se...........

mmm.......

allora, io ti do la soluzione anche per questo, però considera che al limite puoi ricondurre tutto in un unica pagina usando NON una popUp di tipo window.open, ma una popUp nascosta o ajax. esempio questa soluzione è già interamente implementata nell'AJAXControlToolkit di microsoft

SOLUZIONE:
quando crei la grieview, fai in modo che ci sia un pulsante (o un link) per ogni riga, che abbia questo codice (es: pulsante)
<button name="seleziona" onClick="seleziona('<codiceCliente>');" />
dove <codiceCliente> lo hai inserito lato server
(fino a qui credo sia facile creare il codice)

nella pagina del popUp:
function seleziona(codCliente) { var winO = window.opener; var ddl = winO.document.getElementById('<idDellaCombo>'); ddl.options[codCliente].selected = 'selected'; }

ed anche questo non dovrebbe creare problemi.
ciao a presto

venzo Profilo | Junior Member

Questa è la soluzione che cercavo. Però non riesco a capire bene: questi i dati in mio possesso:

nella pagina asp in VB principale:
<asp:DropDownList ID="CodiceCliente" runat="server" AutoPostBack="True" Width="360px" Height="22px" TabIndex="3"></asp:DropDownList>

nella popup:
<button name="seleziona" onClick="seleziona('CodiceCliente');" />

<script type="text/javascript">


function seleziona(codCliente)
{
var winO = window.opener;
var ddl = winO.document.getElementById(?????);
ddl.options[codCliente].selected = '???????';
}
</script>

Per fare un esempio, nel DropDownList è presente il Cliente "Rossi", dove inserisco la stringa Rossi nel Javascript per posizionare l'Item specifico ???
Grazie e scusami.

Gluck74 Profilo | Guru

ok, forse ti ho spiegato male come configurare la griglia di ricerca.
Inoltre ti chiedo scusa perché nel javascript c'è un errore.
Risolviamo.

Partiamo dalla griglia.
Io ho pensato di aggiungere una colonna con un pulsante che ti permette di selezionare il cliente.
Per fare questo, aggiungi il seguente codice alla griglia all'interno di "<Columns>":
<asp:TemplateField ShowHeader="False"> <ItemTemplate> <input type="button" value="Seleziona" onclick="<%# String.Concat("seleziona(\'", Eval("CodiceCliente"), "\');") %>" /> </ItemTemplate> </asp:TemplateField>


nel javascript inoltre la funzione diventa:
function seleziona(codCliente) { var winO = window.opener; var ddl = winO.document.getElementById('<%= CodiceCliente.ClientID %>'); var i = 0; while (i < ddl.options.length) { if (ddl.options[i].value == codCliente) { ddl.selectedIndex = i; return; } i++; } }

Questo abbinando, come puoi vedere, il codice del cliente. Ti sconsiglio vivamente di attuare la soluzione, come hai chiesto tu, sul Nome del cliente.

ciao

venzo Profilo | Junior Member

Ok funziona. Però mi spieghi perchè ho dovuto modificare la riga:

var ddl = winO.document.getElementById('<%= CodiceCliente.ClientID %>');
in
var ddl = winO.document.getElementById('CodiceCliente');
Ciao.

Gluck74 Profilo | Guru

perché i controlli asp non generano l'ID come lo scrivi nella pagina ASPX.
Quello è un identificativo che puoi usare solo nel codice lato server.
Nel client il controllo HTML riceve un ID trasformato in modo da renderlo veramente univoco, e va in base alla posizione del controllo, ovvero in base ai contenitori.
ad esempio:

un bottone id="btnClicca" dentro una griglia diventa:
GridView1_ctl02_btnClick
è il bottone "btnClicca" nella riga 2 (la 1 è l'header con il nome) del gridview1

Quindi per beccare il tuo ddl lato client, devi scrivere ddl.ClientID, che non è altro che l'ID che verrà messo nel codice HTML come spiegato sopra.

ciao ciao
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5