39 messaggi dal 04 marzo 2006
www.naamah.it
Ho una pagina che riempie una specie di listino generato dinamicamente in base ad un prezziario su dbase.
I controlli generati sono, ad esemnpio, dei TextBox con già preinserito il valore letto dal dbase, ma ci deve essere anche la possibilità di modificarlo.
Inoltre ci sono anche dei "Button" generati dinamicamente, l'ID gli è stato assegnato ed ho verificato che è corretto.
Ora, però, come posso usare questi controlli?
Se uso l'ID del controllo che io ho assegnato (ad esempio BA_R12) ho l'errore che il controllo non è stato dichiarato (se pure leggendo l'HTML della pagina vedo che esiste).
Quindi... come possono usare una funzione ButtonClick con questo bottone?
Leggendo il codice mi sembra che non ci sia differenza tra l'ID del bottone generato dinamnicamente e l'ID di un bottone piazzato all'interno del tag "form".

Spero di essermi spiegato...
Comunque il codice è il seguente...

Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
TextBox2.Text = Now()
Dim connDB As OleDbConnection
connDB = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; data source=" & Server.MapPath("mdb-database/Rubrica.mdb"))
connDB.Open()

Dim SQL As String = "SELECT * FROM Clienti ORDER BY Nome"
Dim CMD = New OleDbCommand(SQL, connDB)
Dim aReader = CMD.ExecuteReader()
While aReader.Read()
DropDownList1.Items.Add(aReader(1))
End While

aReader.Close()
connDB.Close()
DropDownList1.SelectedIndex = 0

connDB = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; data source=" & Server.MapPath("mdb-database/Fiches.mdb"))
connDB.Open()

SQL = "SELECT * FROM Listino"
CMD = New OleDbCommand(SQL, connDB)
aReader = CMD.ExecuteReader()
Dim Prezzo() As Integer
Dim Descrizione() As String
Dim ArrCount As Integer
While aReader.Read()
ReDim Preserve Prezzo(ArrCount + 1)
ReDim Preserve Descrizione(ArrCount + 1)
Descrizione(ArrCount) = aReader(1)
Prezzo(ArrCount) = aReader(2)
ArrCount = ArrCount + 1
End While

aReader.Close()
connDB.Close()

Dim rows, cells, i, j As Integer
Dim b As Button
Dim l As Label
Dim Tb As TextBox
Dim Cb As CheckBox
Dim DDl As DropDownList
Dim RowHeader As String() = New String(8) {"", "", "", "", "Descrizione", "Prezzo", "*", "Operatore", ""}
Dim RowHeaderSpace As Integer() = New Integer(8) {10, 30, 30, 20, 120, 50, 30, 80, 10}
rows = 12
cells = RowHeader.Length - 1
For j = 1 To rows
Dim TableRow, r As New TableRow()
For i = 0 To cells
Dim Tablecell, c As New TableCell()
Select Case j
Case 0
l = New Label
l.Text = "<font color=blue>" & RowHeader(i) & "</font>"
c.Controls.Add(l)
c.Attributes.Add("align", "left")
c.Attributes.Add("width", RowHeaderSpace(i))
r.Cells.Add(c)
Case Else
c.Attributes.Add("width", RowHeaderSpace(i))
Select Case i
Case 0
l = New Label
l.Text = ""
c.Attributes.Add("align", "center")
c.Controls.Add(l)
c.Attributes.Add("style", "border-left: 1px solid black; background-color: #5b80cc")
Case 1
b = New Button
b.Text = "+"
b.ID = "BA_R" & j 'Assegno l'ID al controllo
c.Attributes.Add("align", "center")
c.Controls.Add(b)
c.Attributes.Add("style", "border-bottom: 3px solid #5b80cc; background-color: #8FB4FF")
Case 2
b = New Button
b.Text = "-"
b.ID = "BB_R" & j 'Assegno l'ID al controllo
c.Attributes.Add("align", "center")
c.Controls.Add(b)
c.Attributes.Add("style", "border-bottom: 3px solid #5b80cc; background-color: #8FB4FF")
Case 3
l = New Label
l.Text = ""
c.Attributes.Add("align", "center")
c.Controls.Add(l)
c.Attributes.Add("style", "border-bottom: 3px solid #5b80cc; background-color: #8FB4FF")
Case 4
l = New Label
l.Text = Descrizione(j - 1)
c.Attributes.Add("align", "left")
c.Controls.Add(l)
c.Attributes.Add("style", "border-bottom: 3px solid #5b80cc; background-color: #8FB4FF")
Case 5
Tb = New TextBox
Tb.Width = 30
Tb.Text = Prezzo(j - 1)
Tb.ID = "Tb_R" & j 'Assegno l'ID al controllo
c.Attributes.Add("align", "left")
c.Controls.Add(Tb)
c.Attributes.Add("style", "border-bottom: 3px solid #5b80cc; background-color: #8FB4FF")
Case 6
Cb = New CheckBox
Cb.ID = "Cb_R" & j 'Assegno l'ID al controllo
c.Attributes.Add("align", "left")
c.Controls.Add(Cb)
c.Attributes.Add("style", "border-bottom: 3px solid #5b80cc; background-color: #8FB4FF")
Case 7
DDl = New DropDownList
DDl.Items.Add("Clara")
DDl.Items.Add("Fabiana")
DDl.ID = "DDl_R" & j 'Assegno l'ID al controllo
c.Attributes.Add("align", "left")
c.Controls.Add(DDl)
c.Attributes.Add("style", "border-bottom: 3px solid #5b80cc; background-color: #8FB4FF")
Case 8
l = New Label
l.Text = ""
c.Attributes.Add("align", "center")
c.Controls.Add(l)
c.Attributes.Add("style", "border-right: 1px solid Black; background-color: #5b80cc")
End Select
End Select
r.Attributes.Add("height", "30")
r.Cells.Add(c)
Next i
Table1.Rows.Add(r)
Next j
Dim Tr As New TableRow()
Dim Tc As New TableCell()
Tc.Attributes.Add("style", "border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid black; background-color: #5b80cc")
Tc.ColumnSpan = 9
Tc.Attributes.Add("height", "10")
Tr.Cells.Add(Tc)
Table1.Rows.Add(Tr)
End Sub
426 messaggi dal 17 aprile 2006
purtroppo non uso vb dunque evito di postarti il codice :S
ad ogni modo considera un paio di aspetti fondamentali.
1) quando crei controlli dinamicamente se vuoi che abbiano il viewstate e dunque memoria di cio' che gli capita a causa dell'input dell'utente ci sono due strade: a)creare i controlli nel page_init e non dopo il page_load altrimenti il viewstate se ne va a farsi friggere, B)oppure creare il controllo generico senza mettere nessuna proprietà, associarlo ad un controllo contenitore e solo dopo aggiungere tutte le proprietà. in pratica rispetto al tuo codice devi mettere Prima la riga Controls.Add() e solo dopo impostare le proprietà

in merito al problema del click ti basta associare l'evento on_Click al pulsante appena creato (ma gia aggiunto al controllo padre).
in C# si fa button.Click = new EventHandler("nomefunzione");

il nomefunzione deve chiaramente esistere nel codice e deve avere la firma giusta (copiala da una sub gia' creata)
purtroppo non so come vbNet gestisca l'associazione eventi-metodi dunque potrebbe non funzionare la dritta dell'EventHandler...

Ciao Alessandro

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.