Controlli e db

lunedì 19 aprile 2004 - 15.56

d@dora Profilo | Senior Member

Ciao e tutti, ho l'ennesimo quesito da porvi:
vorrei abiliatere/disabilitare alcuni link a runtime, prendendo i valori (visible=true/false) direttamente da db.
Scrivendo il nome del link su db (id) vorrei poterlo abilitare o meno, ma non so come scrivere sintatticamente la cosa e cioe un qualcosa del tipo
rs!ValoreCampoDb.visible=true.

Ciao

Anonimo Profilo | Senior Member

mmmm sicuramente così come dici tu non è fattibile.
Io proverei con executeScalar per prelevare un singolo valore da DB, ma forse mi sbalio...prova ad aspettare un po' e a sentire da chi è più esperto

d@dora Profilo | Senior Member

ora sto utilizzando una cosa del genere:

Do While rs.Read
For x As Int16 = 0 To Me.Controls.Count - 1
If Me.Controls(x).ID Like "Panel*" Then
Dim sPan As Panel = CType(Me.Controls(x), Panel)
For Y As Int16 = 0 To sPan.Controls.Count - 1
If sPan.Controls(Y).ID Like "HyperLink*" Then
Dim sHyp As HyperLink = CType(sPan.Controls(Y), HyperLink)
If sHyp.ID = Trim(rs!Link) Then
sHyp.Visible = True
Exit For
End If
End If
Next
End If
Next
Loop

ma ha grosse pecche, del tipo se cambia il nome del link e altre cose che ho gia' notato.

freeteo Profilo | Guru

ciao,
hai provato con l'istruzione "findcontrol" della pagina?
es:
... ((Hyperlink)this.FindControl((string)miatabella[miariga][miacolonna])).Visible = (bool)miatabella[miariga][miaaltracolonna] ...

etc... che dici, potrebbe tornarti utile?
ciao ;-)

d@dora Profilo | Senior Member

GRANDISSIMO !!!

Ciao e grazie

d@dora Profilo | Senior Member

Ancora una domanda: vista l'utilita di findcontrol, vorrei tradurre la mia pagina con un ciclo, girando su tutti i controlli contenuti sulla pagina e prendendo le informazioni da un file di risorse.
Ho controllato , ma sulle propieta' di findcontrol, non c'e' il text, come posso li posso cambiare usando un ciclo ???

Ciao e grazie

freeteo Profilo | Guru

ciao,
devi girare su tutti i controlli e poi fa il cast e prendi le proprieta' relative...
guarda il mio articoletto sulle fuinzioni ricorsive: http://www.dotnethell.it/articles/article.aspx?ArticleID=91
ti puo tornare utile ;-)
ciao

d@dora Profilo | Senior Member

ho applicato alla lettera il tuo articolo e hai risolto brillantemente il mio problema.

Ciao

freeteo Profilo | Guru

ottimo!
se lo fai in c# devi fare il cast altrimenti in vb puoi mettere "al volo" la proprieta di un oggetto "object" anche se l'intellisense non te la da... ;-)

ciao

d@dora Profilo | Senior Member

infatti l'ho tradotto in vb, facendo pero' ilcast. Provando il tutto, pero', mi sono accorto che non riesco ad intercettare i controlli all'interno di datalist/datagrid, sai se posso modificare la tua routine o se devo farli a manina ???

Ciao e grazie ancora

freeteo Profilo | Guru

si, puoi solo che devi farlo nel itemdatabound, e fargli troavare il controllo al "parametro e", tipo (1 repeater che ha id=risposte) :

private void risposte_ItemDataBound(Object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
if(e.Item.ItemType.ToString() == "Item" || e.Item.ItemType.ToString() == "AlternatingItem")
{
((Literal)e.Item.FindControl("lbltesto")).Visible = true;
......

spero tu riesca a capire cosa voglio dire ;-)
ciao

d@dora Profilo | Senior Member

lo provero' tra un attimo: sei sempre MOLTO preciso e puntuale.

Grazie
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