questo è un esempio: attento, con IE7 la visualizzazione è penosa (nel submit, c'è un notevole sfarfallio dello schermo). Con Firefox ed Opera si vede benessimo.
Questo con framework2. Col framework1 si vede pure con IE
pagina aspx
codice:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="aggiungi riga 4.aspx.vb" Inherits="CorsoApogeo_aggiungere_riga_a_tabella_aggiungi_riga_4" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Pagina senza titolo</title>
<link href="../../stili/Styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:LinkButton ID="LinkButton1" runat="server">Refresh</asp:LinkButton>
<asp:Button ID="Button1" runat="server" Text="Aggiungi riga"></asp:Button>
<asp:Button ID="Button2" runat="server" Text="Togli riga" CausesValidation="false"></asp:Button>
<asp:Button ID="Button3" runat="server" Text="Recupera valori"></asp:Button>
<hr />
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</div>
</form>
</body>
</html>
codice
codice:
Option Strict On
Partial Class CorsoApogeo_aggiungere_riga_a_tabella_aggiungi_riga_4
Inherits System.Web.UI.Page
Protected WithEvents t As System.Web.UI.WebControls.TextBox
Protected WithEvents b As System.Web.UI.WebControls.Button
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Inserire qui il codice utente necessario per inizializzare la pagina
If Not Me.IsPostBack Then
Me.ViewState.Add("n", 0)
Else
Me.CreaTabella()
End If
End Sub
'-------------------------------------------
'crea la tabella
'-------------------------------------------
Private Sub CreaTabella()
Dim Tabella As New Table
Tabella.Attributes.Add("border", "1")
Tabella.Attributes.Add("cellspacing", "1")
Tabella.Attributes.Add("cellPadding", "4")
Tabella.Attributes.Add("style", "border: none; background: transparent;")
Tabella.ID = "table1"
Dim i%
Dim n% = CInt(Me.ViewState("n"))
Dim r As TableRow
Dim c As TableCell
'Dim t As TextBox
Dim v As CompareValidator
For i = 1 To n
r = New TableRow
c = New TableCell
t = New TextBox
b = New Button
With t
.ID = "c_" & i
'.Text = Trim(Me.Request.Form("c_" & i))
.Style.Add("border", "1px black solid")
End With
With b
.ID = "b_" & i
.Style.Add("border", "1px black solid")
.Text = "pulsante " & i
.CommandArgument = i.ToString
End With
AddHandler b.Click, AddressOf Me.b_Click
v = New CompareValidator
v.ID = "v_" & i
v.ErrorMessage = "Il campo deve essere numerico"
v.ControlToValidate = t.ID
v.[Operator] = ValidationCompareOperator.DataTypeCheck
v.Type = ValidationDataType.Integer
c.Controls.Add(t)
c.Controls.Add(v)
c.Controls.Add(b)
r.Cells.Add(c)
Tabella.Rows.Add(r)
Next
Me.PlaceHolder1.Controls.Clear()
Me.PlaceHolder1.Controls.Add(Tabella)
End Sub
'---------------------------------------------------
'aggiunge una riga
'---------------------------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim n% = CInt(Me.ViewState("n")) + 1
Me.ViewState.Add("n", n)
Dim Tabella As Table = DirectCast(Me.PlaceHolder1.Controls(0), Table)
Dim r As New TableRow
Dim c As New TableCell
'Dim t As New TextBox
t = New TextBox
With t
.ID = "c_" & n
'.Text = ""
.Style.Add("border", "1px black solid")
End With
b = New Button
With b
.ID = "b_" & n
.Style.Add("border", "1px black solid")
.Text = "pulsante " & n
.CommandArgument = n.ToString
End With
AddHandler b.Click, AddressOf Me.b_Click
Dim v As New CompareValidator
v.ID = "v_" & n
v.ErrorMessage = "Il campo deve essere numerico"
v.ControlToValidate = t.ID
v.[Operator] = ValidationCompareOperator.DataTypeCheck
v.Type = ValidationDataType.Integer
c.VerticalAlign = VerticalAlign.Top
c.HorizontalAlign = HorizontalAlign.Center
c.Wrap = False
c.Controls.Add(t)
c.Controls.Add(v)
c.Controls.Add(b)
r.Cells.Add(c)
Tabella.Rows.Add(r)
End Sub
'----------------------------------------------------------
'toglie una riga
'----------------------------------------------------------
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim n% = CInt(Me.ViewState("n")) - 1
If n < 0 Then n = 0
Me.ViewState.Add("n", n)
Dim Tabella As Table = DirectCast(Me.PlaceHolder1.Controls(0), Table)
If Tabella.Rows.Count > 0 Then Tabella.Rows.RemoveAt(Tabella.Rows.Count - 1)
End Sub
'-------------------------------------------------
'recupera i valori dei textbox
'-------------------------------------------------
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim Tabella As Table = DirectCast(Me.PlaceHolder1.Controls(0), Table)
Dim i%
Me.Label1.Text = ""
For i = 0 To Tabella.Rows.Count - 1
t = DirectCast(Tabella.Rows(i).Cells(0).Controls(0), TextBox)
'PrintLn(t.Text, "valore di " & t.ID)
Me.Label1.Text += "valore di " & t.ID & ": " & t.Text & "
"
Next
End Sub
'-----------------------------------------------------------------------
'recupero il valore del textbox corrispondente al pulsante
'-----------------------------------------------------------------------
Private Sub b_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim btn As Button = DirectCast(sender, Button)
Dim chiave$ = "c_" & btn.CommandArgument
'PrintLn(DirectCast(Me.FindControl(chiave), TextBox).Text, chiave)
Me.Label1.Text = chiave & ": " & DirectCast(Me.FindControl(chiave), TextBox).Text
End Sub
End Class