autopostback
14 svar · 439 visningar · startad av andreas_lindh
Här är ett exempel på hur du kan skapa asp.net-kontroller dynamiskt:
Dett fungerar perfekt men hur ska jag göra för att hämta värdet i det skapade textfältet?
dim apple as string
apple=Textbox1.Text
Men textboxarna heter ju namn + i som är ett tal
Har försökt med
namn"+ i +".text men det fungerar inte
gruppnamn & "+ i +".text
Detta fungerade inte
Här är koden
dim i as integer
for i = 1 to CInt(antalgrupper.selecteditem.text)
dim strsql2 as string ="insert into grupper(cup_id,namn) values (" + id1 + ",'" + namn + "')"
dim objcmd2 as new oledbcommand(strsql2, objconn)
objcmd2.connection.open()
objcmd2.executenonquery()
objcmd2.connection.close()
next
jag skapar textboxarna så här
sub skapa(obj as object, e as eventargs)
Dim numtexts as Integer
Dim i as Integer
numtexts = CInt(antalgrupper.selecteditem.text)
For i = 1 To numtexts
Dim t As TextBox = New TextBox()
t.Text = "Gruppnamn" & i
t.ID = "Gruppnamn" & i
Label1.Controls.Add(t)
Label1.Controls.Add(new LiteralControl("<br />"))
Next
End Sub
Ingen som har något exempel på hur man kan göra
För att hämta värdena skulle du nog kunna använda .FindControl("Gruppnamn" & i).
Fungerade inte. Får felmedelande:
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
Line 35: for i = 1 to CInt(antalgrupper.selecteditem.text)
Line 36: dim tbnamn as textbox = FindControl("Gruppnamn" & i)
Line 37: dim namn as string = tbnamn.text
Line 38: dim strsql2 as string ="insert into grupper(cup_id,namn) values (" + id1 + ",'" + namn + "')"
Line 39: dim objcmd2 as new oledbcommand(strsql2, objconn)
Source File: h:\inetpub\wwwroot\cup\addcup.aspx Line: 37
Page.Controls.FindControls testa det, annars får du kontrollera så den inte råkar loopa en för mycket.
Nytt felmedelande.
Compiler Error Message: BC30456: 'FindControl' is not a member of 'System.Web.UI.ControlCollection'.
Source Error:
Line 34: dim i as integer
Line 35: for i = 1 to CInt(antalgrupper.selecteditem.text)
Line 36: dim tbnamn as textbox = Page.Controls.FindControl("Gruppnamn" & i)
Line 37: dim namn as string = tbnamn.text
Line 38: dim strsql2 as string ="insert into grupper(cup_id,namn) values (" + id1 + ",'" + namn + "')"
Source File: h:\inetpub\wwwroot\cup\addcup.aspx Line: 36
Jag fick göra så här för att det skulle fungera
request.form("gruppnamn" & i)
Kanske inte den bästa lösningen men den fungerar
annars funkar detta här:
<%@ Page Language="VB" %>
<script runat="server">
Private Sub Page_Load(sender As Object, e As EventArgs)
Dim t As New TextBox()
t.Text = "Skriv:"
t.Id = "txt1"
txt.Controls.Add(t)
End Sub
Public Sub txtBox_Click(Sender as object, e as eventargs)
Dim _box As Control = FindControl("txt1")
If (Not _box Is Nothing) Then
If (TypeOf _box Is TextBox) Then
Dim txtBox = CType(_box, TextBox)
txtBox.Text += " : <edit>"
End If
End If
End Sub
</script>
<html>
<head>
</head>
<body>
<form runat="server">
<span id="txt" runat="server"></span> <asp:LinkButton id="lnkButton" runat="server" onClick="txtBox_Click">Ändra</asp:LinkButton>
</form>
</body>
</html>
du får principen men detta kräver lite mer jobb då det är hårdkodat inne i subben som ändrar själva värdet inne i textboxen. Detta behöver ändras till mer dynamik ;)
cya,
PatrikB
ett litet mer dynamiskt test om du ändrar mellan scriptaggarna så att det ser ut så här:
<script runat="server">
Private Sub Page_Load(sender As Object, e As EventArgs)
Dim n as integer
For n = 0 to 10
Dim t As New TextBox()
t.Text = "Skriv:"
t.Id = "txt" & n.tostring()
txt.Controls.Add(t)
txt.Controls.Add(New LiteralControl("<br />"))
Next n
End Sub
Public Sub txtBox_Click(Sender as object, e as eventargs)
Dim n as integer = 0
'## -- load first control --
Dim _box As Control = FindControl("txt0")
'## -- loop while we have controls to add --
Do While (Not _box Is Nothing)
'## -- check if the control is of type <TextBox> --
If (TypeOf _box Is TextBox) Then
'## -- strongly type the control to <TextBox> --
Dim txtBox = CType(_box, TextBox)
'## -- process data in the textbox control --
txtBox.Text += " : <edit>"
End If
n += 1
'## -- load new control --
_box = FindControl("txt" & n.tostring())
Loop
End Sub
</script>
cya,
PatrikB