Frågan#1
Hej alla smarta,
Se min bifogade bild på hur det ser ut i nuläget. Det börjar se bra ut, dock så får jag dubbelt så många headerceller och textboxar som jag vill ha. Bilden visar det. Någon som vet hur jag kan få rätt antal av mina kontroller? Är det någon med att page_load körs två gånger eller något...?
Tacksam för hjälp jag kan få. Och ursäkta den stora textmassan!
//mvh Björn
<%@ 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
'// Lägg värdet från querystring-variabeln i en ny variabel
Dim kvall_id = Request.QueryString("kvallens_id")
'// Om inget kvall_id är tillgängligt gå till nights_start.aspx
if kvall_id="" then response.redirect("log_on.aspx")
'// Nytt = hämta in De närvarande
Dim sql_present as string
sql_present="SELECT tblNarvarande.*, tblMedlem.anvnamn FROM tblNarvarande, tblMedlem WHERE tblNarvarande.medlem_id = tblMedlem.medlem_id AND tblNarvarande.kvall_id=" & kvall_id
'// deklarera dr som ett OLEDBDatareader-objekt. Anropar funktionen datareader_data med
'// sql-satsen, funktionen returnerar just ett OLEDBDatareader-objekt.
Dim Dr_present as OLEDBDatareader = datareader_data(sql_present)
'//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
rubrik.visible = true
registrera.visible = true
Dim i as integer = 1
Dim headerRow as New TableRow()
Dim header1 As New TableHeaderCell()
header1.text = "Produktnamn"
header1.HorizontalAlign = HorizontalAlign.Left
headerRow.Cells.Add(header1)
While Dr_present.read()
Dim k as integer = 0
Dim header2 As New TableHeaderCell()
header2.text = Dr_present("anvnamn")
header2.HorizontalAlign = HorizontalAlign.Left
headerRow.Cells.Add(header2)
produktnamnen.Rows.AddAt(k, headerRow)
k = k+1
end while
Dr_present.close()
for i = 1 to (antalrader)
'// Nytt = hämta in De närvarande
Dim sql_present2 as string
sql_present2="SELECT tblNarvarande.*, tblMedlem.anvnamn FROM tblNarvarande, tblMedlem WHERE tblNarvarande.medlem_id = tblMedlem.medlem_id AND tblNarvarande.kvall_id=" & kvall_id
'// deklarera dr som ett OLEDBDatareader-objekt. Anropar funktionen datareader_data med
'// sql-satsen, funktionen returnerar just ett OLEDBDatareader-objekt.
Dim Dr_present2 as OLEDBDatareader = datareader_data(sql_present2)
Dim row As New TableRow
While Dr_present2.read()
Dim cell As New TableCell
Dim txb As New TextBox
txb.cssclass="formtext"
cell.Controls.Add(txb)
row.Cells.Add(cell)
end while
'// För att få den extra som behövs
Dim cell2 as New TableCell
Dim txc as New Textbox
txc.cssclass="formtext"
cell2.Controls.Add(txc)
row.Cells.Add(cell2)
'/////////////////////////////////
produktnamnen.Rows.Add(row)
Dr_present2.close()
next
else
txtTestav.enabled = true
antalArtiklar.enabled = true
okej.enabled = true
lblVad.enabled = true
lblHur.enabled = true
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
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>
