dynamisk tabell - lagra textboxars värde till data Hur gör du när du postar tillbaka sidan? För att komma åt TextBox-kontrollernas ViewState måste du dynamiskt placera ut dem på nytt även vid PostBack, även om du inte tänkt visa dem på sidan. Ett annat (fulare) sätt är att använda Request["TextBoxId1"] o.s.v. Hej Joakim, Hej,Dynamiskt skapade textboxar - hämta värde vid "INSERT INTO..."-sats...
Hej alla smarta,
Har genom nedanstående kod lyckats ska en dynamisk tabell. Den skapar helt enkelt ett antal rader med en textbox för varje rad. Efter att användaren har fyllt i textboxarna vill jag lagra dessa värden. Men hur gör jag det? Använder Asp.net 1.1, VB och MS Access.
While (i < antalrader)
Dim row As New TableRow
Dim cell As New TableCell
'Dim cell2 As New TableCell
'Dim label As New Label
'label.Text = "Produktnamn"
Dim txb As New TextBox
txb.id = "boxen" & i.ToString()
txb.cssclass="formtext"
cell.Controls.Add(txb)
'cell2.Controls.Add(txb)
response.Write(txb.id)
row.Cells.Add(cell)
'row.Cells.Add(cell2)
produktnamnen.Rows.Add(row)
i = i + 1
end while
Gör nu så här:
dim sql5 as string = "INSERT INTO tblTestprod(test_id,produktnamn) VALUES(" & Session("NyttTestid") & ",'" & produktnamnen.Rows(0).Cells(0).Text & "')"
Men när jag kör Response.write(sql5) så får jag att värdet på mina textboxar är tomt ( = "")....
Någon som har någon idé??????
//mvh Björn
Sv: Dynamiskt skapade textboxar - hämta värde vid "INSERT INTO..."-sats...
Sv:Dynamiskt skapade textboxar - hämta värde vid "INSERT INTO..."-sats...
Tack för ditt svar! Är hyfsat med på det här med ViewState och att jag måste återskapa dem igen vid Postback. Men får inte riktigt rätt på det:
Jag har följande kod (hela koden). Det fungerar förutom att det blir dubbelt så många textboxar som jag vill. Dock så när jag vill skriva infon till databasen så lagrar den rätt antal gånger. Varför blir det dubbelt så många textboxar?
<%@ Page Language="VB" Debug="true" ContentType="text/html" ResponseEncoding="iso-8859-1"%>
<!--#include file="inkluderingsfiler/globalt.inc.aspx" -->
<%@ Import Namespace="System.data" %>
<%@ Import Namespace="System.data.oledb" %>
<%@ Import Namespace="system.web.mail" %>
<script language="VB" runat="server">
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'//Inte första gången men annars:
If Page.IsPostBack = true
'//hämta värdet från dropdown
Dim antalrader As Integer = antalartiklar.selecteditem.value 'Det antal som användaren väljer i drowdown-listan
'// när vi skapar betygsformuläret gör tidigare kontroller oaktiverade
txtTestav.enabled = false
antalArtiklar.enabled = false
okej.enabled = false
lblVad.enabled = false
lblHur.enabled = false
produktnamn_rubrik.visible = true
registrera.visible = true
Dim i as integer = 1
for i = 1 to (antalrader)
Dim row As New TableRow
Dim cell As New TableCell
'Dim cell2 As New TableCell
'Dim label As New Label
'label.Text = "Produktnamn"
Dim txb As New TextBox
'txb.id = "boxen" & i.ToString()
txb.cssclass="formtext"
cell.Controls.Add(txb)
'cell2.Controls.Add(txb)
row.Cells.Add(cell)
'row.Cells.Add(cell2)
produktnamnen.Rows.Add(row)
'i = i + 1
response.Write(antalrader)
next
else
txtTestav.enabled = true
antalArtiklar.enabled = true
okej.enabled = true
lblVad.enabled = true
lblHur.enabled = true
produktnamn_rubrik.visible = false
registrera.visible = false
'// kolla så att är inloggad, om inte redirect till logon.aspx
Dim medlem_id as integer = Session("medlem_id")
If medlem_id <=0 then
response.redirect("log_on.aspx")
else
end if
'************************hämta antal närvarande*************************
Dim kvall_id=Request.QueryString("kvallens_id")
Dim Con8 as new OLEDBConnection(db)
Con8.open()
Dim sql8 as string
sql8="SELECT tblNarvarande.medlem_id FROM tblNarvarande WHERE tblNarvarande.kvall_id=" & kvall_id
'// Hämta data från databasen med hjälp av funktionen datareader_data
Dim Dr8 as OLEDBDatareader = datareader_data(sql8)
con8.close()
dr8.close()
end if
end sub
'**************************************************************************************************************
'Hur många rader ska det vara i vår datagrid
'**************************************************************************************************************
function antalBoxar(antalboxes as integer) as integer
dim antalboxes2 as integer
antalboxes2 = antalartiklar.selecteditem.value
return antalboxes2
end function
'**************************************************************************************************************
'**************************************************************************************************************
'När användaren skrivit in vad de testat och valt antal testprodukter trycker han på Okej och då körs nedan kod.
'**************************************************************************************************************
sub make_boxes(sender As Object, e As EventArgs)
'********************************************************************************
'Spara vad som testades för kvällen när användaren trycker på skapa boxar.
'********************************************************************************
'// hämta hem kvallens_id från länken och lagra som en variabel
Dim kvallens_id=Request.QueryString("kvallens_id")
Dim Con4 as new OLEDBConnection(db)
Con4.open()
'// sql-sats som lägger in textboxarnas värde i en ny post i tblKvall (tillsammans med medlem_id = vem kvällen var hos)
dim sql4 as string = "INSERT INTO tblTest(kvall_id,testav) VALUES(" & kvallens_id & ",'" & txtTestav.text & "')"
'// Command-objekt
dim Cmd as new OLEDBCommand(sql4, Con4)
'// Köra frågan mot databasen
Cmd.executeNonQuery()
'// Spara senast test_id i en variabel som heter NyttTestid
Cmd.commandtext = "SELECT @@identity"
Dim NyttTestid as string = convert.ToInt32(Cmd.ExecuteScalar())
session("NyttTestid") = NyttTestid
Con4.close()
'********************************************************************************
'// när vi skapar betygsformuläret gör tidigare kontroller oaktiverade
txtTestav.enabled = false
antalArtiklar.enabled = false
okej.enabled = false
lblVad.enabled = false
lblHur.enabled = false
produktnamn_rubrik.visible = true
registrera.visible = true
end sub
'**************************************************************************************************************
sub reg_boxes(sender As Object, e As EventArgs)
'********************************************************************************
'Spara vilka produktnamn som testades när användaren trycker på Registrera-knappen.
'********************************************************************************
Dim Con5 as new OLEDBConnection(db)
Con5.open()
Dim i As Integer = 1
Dim antalrader As Integer = antalartiklar.selecteditem.value 'Det antal som användaren väljer i drowdown-listan
dim j as integer = 0
for i = 1 to (antalrader)
dim sql5 as string = "INSERT INTO tblTestprod(test_id,produktnamn) VALUES(" & Session("NyttTestid") & ",'" & CType(produktnamnen.Rows(j).Cells(0).Controls(0), TextBox).Text & "')"
'// Command-objekt
dim Cmd as new OLEDBCommand(sql5, Con5)
'// Köra frågan mot databasen
Cmd.executeNonQuery()
j=j+1
next
Con5.close()
'********************************************************************************
end sub
'***************************************************************************************
'Funktion för att hämta data från databasen
'***************************************************************************************
'Anropas så här:
' Dim Dr as OLEDBDatareader
' Dr = datareader_data("sql-satsen här")
function datareader_data(sql as String) as OLEDBDatareader
'// Deklarera och öppna anslutning
Dim Con as new OLEDBConnection(db)
Con.open()
'// Hämta info från databasen med hjälp av sql-satsen och anslutnings-objektet
Dim Cmd as New OLEDBCommand(sql,Con)
'// Skapa en datareader att lägga information i
Dim Dr as OLEDBDatareader
'// Knyt info från command-objekt till vår datareader
Dr = Cmd.executeReader(Commandbehavior.closeConnection)
'// Returnera datareader
return Dr
'// stäng anslutningen
con.close()
'// stäng datareadern
dr.close()
end function
'***************************************************************************************
</script>
<html>
<head>
<title><%= sidtitel %> - Lägg till grabbkväll del 5</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="/css/grabbkvall.css" rel="stylesheet" type="text/css">
</head>
<body>
<p class="headline">Lägg till grabbkväll - del 5!</p>
<form id="part5" runat="server" class="formtext">
<table class="formtext" width="521" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="25" align="left" valign="top"> </td>
<td colspan="2" align="left" valign="top"> </td>
</tr>
<tr>
<td width="25" height="20" align="left" valign="top"> </td>
<td height="20" colspan="2" align="left" valign="top"><asp:label runat="server" CssClass="formtext" id="lblVad" Text="Vad testade ni för något?" /> <br> <br> </td>
</tr>
<tr>
<td width="25" height="25" align="left" valign="top"> </td>
<td height="25" colspan="2" align="left" valign="top"><asp:textbox CssClass="formtext" ID="txtTestav" Columns="30" runat="server" Visible="true" />
</td>
</tr>
<tr>
<td height="25" align="left" valign="top"> </td>
<td height="25" colspan="2" align="left" valign="top"> <asp:requiredfieldvalidator id="testav_tomt" autopostback="true" runat="server" Text="Fyll i vad som testades!" ControlToValidate="txtTestav" CssClass="formtext" Display="Dynamic" /> <br> <br> </td>
</tr>
<tr>
<td height="25" align="left" valign="top"> </td>
<td height="25" colspan="2" align="left" valign="top"><asp:label runat="server" CssClass="formtext" id="lblHur" Text="Hur många produkter testades?" /></td>
</tr>
<tr>
<td height="25" align="left" valign="top"> </td>
<td height="25" colspan="2" align="left" valign="top"><asp:dropdownlist ID="antalartiklar" CssClass="formtext" runat="server" AutoPostBack="false" >
<asp:listitem Value="0">Välj</asp:listitem>
<asp:listitem Value="1">1</asp:listitem>
<asp:listitem Value="2">2</asp:listitem>
<asp:listitem Value="3">3</asp:listitem>
<asp:listitem Value="4">4</asp:listitem>
<asp:listitem Value="5">5</asp:listitem>
<asp:listitem Value="6">6</asp:listitem>
<asp:listitem Value="7">7</asp:listitem>
<asp:listitem Value="8">8</asp:listitem>
<asp:listitem Value="9">9</asp:listitem>
<asp:listitem Value="10">10</asp:listitem>
</asp:dropdownlist></td>
</tr>
<tr>
<td height="25" align="left" valign="top"> </td>
<td height="25" colspan="2" align="left" valign="top"><asp:requiredfieldvalidator id="Checkantalartiklar" InitialValue="0" autopostback="true" runat="server" Text="Gör ett val!" ControlToValidate="antalArtiklar" CssClass="formtext" Display="Dynamic" /></td>
</tr>
<tr>
<td align="left" valign="top"> </td>
<td colspan="2" align="left" valign="top"><asp:button runat="server" Text="Skapa boxar" CssClass="formtext" Visible="true" id="okej" OnClick="make_boxes" /></td>
</tr>
<tr>
<td width="25" align="left" valign="top"> </td>
<td colspan="2" align="left" valign="top"><br>
<asp:label runat="server" ID="produktnamn_rubrik" CssClass="formtext" Text="Produktnamn" Visible="false" /><br>
<asp:table runat="server" ID="produktnamnen" CssClass="formtext" />
</td>
</tr>
<tr>
<td width="25" align="left" valign="top"> </td>
<td align="left" valign="top"><br><asp:button runat="server" Text="Registrera" CssClass="formtext" id="registrera" OnClick="reg_boxes" Visible="false" /></td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td width="25" align="left" valign="top"> </td>
<td align="left" valign="top"></td>
<td align="left" valign="top"></td>
</tr>
</table>
</form>
</body>
</html>
Jättetacksam om någon kan lista ut vad som är galet!
//mvh Björn
Sv: Dynamiskt skapade textboxar - hämta värde vid "INSERT INTO..."-sats...
Det har löst sig nu. Sedan tidigare försök när jag försökte lösa detta genom en datagrid så låg detta kvar:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Ändrade till:
Private Sub Page_Load()
....nu blir det rätt!
//mvh Björn