Sono incappato in un problemino.
Genero via codice una serie di controlli di tipo textbox in questo modo:
codice:
for k = 1 to 100
Dim Tbx = New TextBox()
Tbx.ID = k & "|" & IDclasse
Tbx.Text = 0
Tbx.AutoPostBack = True
<celladiunatabella>.Controls.Add(Tbx)
if k >40 then
AddHandler Tbx.TextChanged, AddressOf Me.TextBox_TextChanged
end if
next
Come si vede, ad alcune di queste celle aggiungo, sempre via codice, un handler per scatenare una funzione quando cambia il contenuto del textbox.
La funzione fa più o meno quanto segue:
codice:
Protected Sub TextBox_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
Dim txtBoxSender As TextBox = sender
Dim strID As String = txtBoxSender.ID
Dim IDriga As String = Left(strID, InStr(1, strID, "|", CompareMethod.Text) - 1)
Dim IDclasse As Integer = CInt(Right(strID, Len(strID) - InStr(1, strID, "|", CompareMethod.Text)))
Me.titolo_list.Text = "Hai cambiato il valore del controllo in riga" & IDriga & " classe" & IDclasse & " e ci hai messo il valore '" & txtBoxSender.Text & "'"
....
Dim occhioaquesto As TextBox
occhioaquesto = Me.FindControl(IDriga+5 & "|" & IDclasse+2)
Il problemino è che il clientId renderizzato è diverso dall'ID che io assegno nel ciclo for ai diversi controlli, quindi il valore strID che io leggo nella funzione non ha "il formato" in cui ho "formattato gli ID nel ciclo e di conseguenza la funzione non estrae IDriga e IDclasse nel modo in cui me l'aspetto ma insieme ad altre parti della stringa strID e, in sintesi, non riesco a trovare il controllo "occhioaquesto"!
Avendo bisogno di sapere quei due dati che ho indicato nell'ID, ho provato a cercare e ho visto che esiste il modo di far si che il clientID e l'ID affibbiato via codice coincidano, impostando la proprietà ClientIDMode su Static, però credo che questo abbia diverse controindicazioni.
Sepoffà o nosepoffà? (e anche commesefà? perchè non è una proprietà del controllo ma di non so cosa...)
Siccome ho visto come renderizza i clientID e mi pare che aggiunga solo una parte di stringa ("contents_") davanti all'ID che ho indicato io, mi chiedo se posso far conto che i clientID siano sempre renderizzati nello stesso modo e modificare la funzione in modo che vada a pescare i valori che mi servono di conseguenza, oppure può succedere che vengano nominati in maniera diversa a seconda di nonsocosa?
grazie anticipato per le risposte