Springen naar inhoud


- - - - -
Solved

Checkboxlist

ASP CheckBoxList

  • Log in a.u.b. om te beantwoorden
Er zijn 12 reacties in dit onderwerp

#1 Profile

Profile

    Junior Developer

  • Leden
  • PipPip
  • 52 berichten
    Laatst bezocht 03 Jul 2013 12:04

Geplaatst op 27 February 2013 - 16:24


Hallo,

Ik heb een probleempje, ik heb namelijk een checkboxList, dit is de code wanneer ik een checkbox selecteer en dan op button1 click dan wordt de value van de database opgeslaan in de database. Maar het probleem is wanneer ik mijn programma opnieuw run dan staan de checkboxen niet meer checked.

Nu wil ik in de page_load een programma schrijven die kijkt in de database welke checkbox gecheckt geweest is en dat die dan disabled wordt.

Kan iemand mij helpen?


Code:
	 Dim conn As New OleDb.OleDbConnection(ConfigurationManager.ConnectionStrings("Myconnection").ConnectionString)
	 conn.Open()
	 Dim qry As String = Nothing
	 Dim inputvalue As String = Nothing
	 Dim I As Integer = 0
	 For I = 0 To CheckBoxList2.Items.Count - 1
		 If CheckBoxList2.Items(I).Selected = True Then
			 inputvalue = CheckBoxList2.Items(I).Text
			 qry = "INSERT INTO tblPlaats (Stoelnummer) VALUES ('" & inputvalue & "')"
			 Dim cmd As New OleDb.OleDbCommand(qry, conn)
			 cmd.ExecuteNonQuery()
		 End If
	 Next
	 conn.Close()



#2 Benno

Benno

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 949 berichten
    Laatst bezocht 10 Aug 2014 13:16
  • LocatieGyor, Magyarország

Geplaatst op 27 February 2013 - 21:04

Je hebt een kolom per stoel in je tabel?
Waarom?

Hoeveel  stoelen heb je zo?

#3 Profile

Profile

    Junior Developer

  • Leden
  • PipPip
  • 52 berichten
    Laatst bezocht 03 Jul 2013 12:04

Geplaatst op 27 February 2013 - 22:32

Bericht bekijkenBenno, op 27 February 2013 - 21:04, zei:

Je hebt een kolom per stoel in je tabel?
Waarom?

Hoeveel  stoelen heb je zo?

Ik heb 150 stoelen, Kan ik het makkelijker oplossen?

#4 Benno

Benno

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 949 berichten
    Laatst bezocht 10 Aug 2014 13:16
  • LocatieGyor, Magyarország

Geplaatst op 27 February 2013 - 23:52

Bericht bekijkenBenno, op 27 February 2013 - 21:04, zei:

Je hebt een kolom per stoel in je tabel?
Neen dus, zat te slapen toen ik dat vroeg.

Bericht bekijkenProfile, op 27 February 2013 - 22:32, zei:

Ik heb 150 stoelen, Kan ik het makkelijker oplossen?
Geen idee, ik weet niet wat je aan het doen bent.

#5 Benno

Benno

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 949 berichten
    Laatst bezocht 10 Aug 2014 13:16
  • LocatieGyor, Magyarország

Geplaatst op 28 February 2013 - 00:04

Bericht bekijkenProfile, op 27 February 2013 - 16:24, zei:



Nu wil ik in de page_load een programma schrijven die kijkt in de database welke checkbox gecheckt geweest is en dat die dan disabled wordt.

Bijvoorbeeld:
Visual Basic Code:
		' In Page Load
		Dim lijst = GetStoelen()
		For Each item As ListItem In checkBoxListStoelen.Items
			item.Selected = lijst.Contains(item.Text)
			item.Enabled = Not item.Selected
		Next


Visual Basic Code:
	Private Function GetStoelen() As List(Of String)
		Dim lijst As New List(Of String)
		Const cmdText As String = "SELECT StoelNummer FROM Plaats"
		Using connection As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)
			Using command As New SqlCommand(cmdText, connection)
				connection.Open()
				Using reader = command.ExecuteReader
					While reader.Read
						lijst.Add(reader.GetString(0))
					End While
				End Using
				connection.Close()
			End Using
		End Using
		Return lijst
	End Function


Kan ook met een datatable.

Je kan ook zorgen dat de items i.p.v. disabled, niet meer zichtbaar zijn.

Als dit voor een theater of een bioscoop of zo is, ben je dan niet beter met een imagemap?

#6 Profile

Profile

    Junior Developer

  • Leden
  • PipPip
  • 52 berichten
    Laatst bezocht 03 Jul 2013 12:04

Geplaatst op 28 February 2013 - 19:51

Bericht bekijkenBenno, op 28 February 2013 - 00:04, zei:

Bijvoorbeeld:
Visual Basic Code:
	 ' In Page Load
Dim lijst = GetStoelen()
	 For Each item As ListItem In checkBoxListStoelen.Items
		 item.Selected = lijst.Contains(item.Text)
		 item.Enabled = Not item.Selected
	 Next


Visual Basic Code:
Private Function GetStoelen() As List(Of String)
	 Dim lijst As New List(Of String)
	 Const cmdText As String = "SELECT StoelNummer FROM Plaats"
	 Using connection As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)
		 Using command As New SqlCommand(cmdText, connection)
			 connection.Open()
			 Using reader = command.ExecuteReader
				 While reader.Read
					 lijst.Add(reader.GetString(0))
				 End While
			 End Using
			 connection.Close()
		 End Using
	 End Using
	 Return lijst
End Function


Kan ook met een datatable.

Je kan ook zorgen dat de items i.p.v. disabled, niet meer zichtbaar zijn.

Als dit voor een theater of een bioscoop of zo is, ben je dan niet beter met een imagemap?

Hallo Benno,

het is inderdaad voor een bioscoop zaal, zodat mensen hun eigen zitje kunnen selecteren, bv zoals bij kinepolis.

Bijlage  58771703.png   5.73K   0 downloads

Ik krijg nog een foutmelding bij het runnen van het programma
Dit is mijn code:

Code:
Public Class WebForm16
Inherits System.Web.UI.Page
Private Function GetStoelen() As List(Of String)
	 Dim lijst As New List(Of String)
	 Const cmdText As String = "SELECT StoelNummer FROM tblPlaats"
	 Using connection As New OleDb.OleDbConnection(ConfigurationManager.ConnectionStrings("Myconnection").ConnectionString)
		 Using command As New OleDb.OleDbCommand(cmdText, connection)
			 connection.Open()
			 Using reader = command.ExecuteReader
				 While reader.Read
					 lijst.Add(reader.GetString(0))
				 End While
			 End Using
			 connection.Close()
		 End Using
	 End Using
	 Return lijst
End Function
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
	 Dim lijst = GetStoelen()
	 For Each item As ListItem In CheckBoxList2.Items
		 item.Selected = lijst.Contains(item.Text)
		 item.Enabled = Not item.Selected
	 Next
End Sub

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
	 Dim conn As New OleDb.OleDbConnection(ConfigurationManager.ConnectionStrings("Myconnection").ConnectionString)
	 conn.Open()
	 Dim qry As String = Nothing
	 Dim inputvalue As String = Nothing
	 Dim I As Integer = 0
	 For I = 0 To CheckBoxList2.Items.Count - 1
		 If CheckBoxList2.Items(I).Selected = True Then
			 inputvalue = CheckBoxList2.Items(I).Text
			 qry = "INSERT INTO tblPlaats (Stoelnummer) VALUES ('" & inputvalue & "')"
			 Dim cmd As New OleDb.OleDbCommand(qry, conn)
			 cmd.ExecuteNonQuery()
		 End If
	 Next
	 conn.Close()
End Sub


Bijlage  knipselvk.png   239.35K   0 downloads

#7 Benno

Benno

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 949 berichten
    Laatst bezocht 10 Aug 2014 13:16
  • LocatieGyor, Magyarország

Geplaatst op 28 February 2013 - 21:29

Wat is het type van StoelNummer in je databank?
GetString veronderstelt een String.
Visual Basic Code:
 lijst.Add(reader.GetString(0)) 

Je hebt GetDouble,; GetInt64, GetInt32, GetDecimal, enzovoort...

#8 Profile

Profile

    Junior Developer

  • Leden
  • PipPip
  • 52 berichten
    Laatst bezocht 03 Jul 2013 12:04

Geplaatst op 28 February 2013 - 21:41

Bericht bekijkenBenno, op 28 February 2013 - 21:29, zei:

Wat is het type van StoelNummer in je databank?
GetString veronderstelt een String.
Visual Basic Code:
 lijst.Add(reader.GetString(0)) 

Je hebt GetDouble,; GetInt64, GetInt32, GetDecimal, enzovoort...

Ik maak gebruik van een access database, Stoelnummer is een numeriek veld met veldlengte lange integer

#9 Profile

Profile

    Junior Developer

  • Leden
  • PipPip
  • 52 berichten
    Laatst bezocht 03 Jul 2013 12:04

Geplaatst op 28 February 2013 - 21:51

Bericht bekijkenProfile, op 28 February 2013 - 21:41, zei:

Ik maak gebruik van een access database, Stoelnummer is een numeriek veld met veldlengte lange integer

Ik heb nu mijn type veranderd naar Tekst en het werkt. Maar er zit nog een foutje in.

Wanneer ik een checkbox aanvink die nog vrij is, en ik klik dan vervolgens op mijn ADD button dan komt deze checkbox niet in mijn database terrecht en blijft hij afgevinkt.

#10 Benno

Benno

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 949 berichten
    Laatst bezocht 10 Aug 2014 13:16
  • LocatieGyor, Magyarország

Geplaatst op 28 February 2013 - 22:17

Bericht bekijkenProfile, op 28 February 2013 - 21:51, zei:

Ik heb nu mijn type veranderd naar Tekst en het werkt.
Dat was niet de bedoeling. De bedoeling was dat je de code ging aanpassen aan het type in de databank.
Dus, als het int was in de databank, dan werd het
Visual Basic Code:
reader.GetInt32(0)

Bericht bekijkenProfile, op 28 February 2013 - 21:51, zei:

Wanneer ik een checkbox aanvink die nog vrij is, en ik klik dan vervolgens op mijn ADD button dan komt deze checkbox niet in mijn database terrecht en blijft hij afgevinkt.
Een mogelijke verklaring is de volgorde van de events: eerst wordt de Load eventhandler uitgevoerd, en pas later de Click eventhandler.
Dus: je haalt eerst de Selected weg (want stond niet in de database) in de Load eventhandler en daarna schrijf je enkel de selected weg (dubbel, driedubbel, vierdubbel, ... veronderstel ik?) .
Er is een IsPostBack property die misschien soelaas zal bieden?

#11 Profile

Profile

    Junior Developer

  • Leden
  • PipPip
  • 52 berichten
    Laatst bezocht 03 Jul 2013 12:04

Geplaatst op 28 February 2013 - 22:25

Bericht bekijkenBenno, op 28 February 2013 - 22:17, zei:

Dat was niet de bedoeling. De bedoeling was dat je de code ging aanpassen aan het type in de databank.
Dus, als het int was in de databank, dan werd het
Visual Basic Code:
reader.GetInt32(0)


Een mogelijke verklaring is de volgorde van de events: eerst wordt de Load eventhandler uitgevoerd, en pas later de Click eventhandler.
Dus: je haalt eerst de Selected weg (want stond niet in de database) in de Load eventhandler en daarna schrijf je enkel de selected weg (dubbel, driedubbel, vierdubbel, ... veronderstel ik?) .
Er is een IsPostBack property die misschien soelaas zal bieden?

mijn IsPostBack property staat op false,

Ik snap niet goed wat je bedoelt met haal eerst de selected weg?
Code:
	Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
		Dim lijst = GetStoelen()
		For Each item As ListItem In CheckBoxList2.Items
			item.Selected = lijst.Contains(item.Text)
			item.Enabled = Not item.Selected
		Next
	End Sub
	Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
		Dim conn As New OleDb.OleDbConnection(ConfigurationManager.ConnectionStrings("Myconnection").ConnectionString)
		conn.Open()
		Dim qry As String = Nothing
		Dim inputvalue As String = Nothing
		Dim I As Integer = 0
		For I = 0 To CheckBoxList2.Items.Count - 1
			If CheckBoxList2.Items(I).Selected = True Then
				inputvalue = CheckBoxList2.Items(I).Text
				qry = "INSERT INTO tblPlaats (Stoelnummer) VALUES ('" & inputvalue & "')"
				Dim cmd As New OleDb.OleDbCommand(qry, conn)
				cmd.ExecuteNonQuery()
			End If
		Next
		conn.Close()
	End Sub

	Private Function GetStoelen() As List(Of String)
		Dim lijst As New List(Of String)
		Const cmdText As String = "SELECT StoelNummer FROM tblPlaats"
		Using connection As New OleDb.OleDbConnection(ConfigurationManager.ConnectionStrings("Myconnection").ConnectionString)
			Using command As New OleDb.OleDbCommand(cmdText, connection)
				connection.Open()
				Using reader = command.ExecuteReader
					While reader.Read
						lijst.Add(reader.GetInt32(0))
					End While
				End Using
				connection.Close()
			End Using
		End Using
		Return lijst
	End Function



#12 Benno

Benno

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 949 berichten
    Laatst bezocht 10 Aug 2014 13:16
  • LocatieGyor, Magyarország

Geplaatst op 01 March 2013 - 00:08

De Page_Load wordt altijd eerst uitgevoerd.
In die Page_Load zal je alle checkboxen clearen die nog niet in de databank stonden.
Dus wat niet in de databank stond wordt niet weggeschreven.

Je kan dat oplossen door te testen op IsPostBack (pagina wordt van de browser terug naar de dezelfde URL gestuurd, bijvoorbeeld omdat je op de add knop klikte).

Als je dat doet moet je het wegschrijven ook aanpassen (je mag enkel die checkboxen "wegschrijven" die enabled zijn (de andere staan al in de databank).

Dus zoiets:
Visual Basic Code:
Partial Class _Default
	Inherits System.Web.UI.Page


	' DEZE CODE WORDT ALTIJD UITGEVOERD VOOR DE ButtonAdd_Click !!
	Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
		' Ik maak de ListItems hier ook dynamisch aan, jij hebt dat niet denk ik, dus dat is even anders.
		' Daarom zet ik dat ook even afzonderlijk, normaal zou ik het combineren met de code hier onder
		If Not IsPostBack Then
			For index = 1 To 150
				CheckBoxListStoelen.Items.Add(New ListItem("", index.ToString))
			Next
		End If

		' Enkel indien geen PostBack (dus indien niet op knop geklikt, bijvoorbeeld)
		If Not IsPostBack Then
			Dim lijst = GetStoelen()
			For Each item As ListItem In CheckBoxListStoelen.Items
				item.Selected = lijst.Contains(item.Value)
				item.Enabled = Not item.Selected
			Next
		End If
	End Sub

	' DEZE CODE WORDT ALTIJD UITGEVOERD NA DE Page_Load
	Protected Sub ButtonAdd_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
		Const cmdText = "INSERT INTO Plaats (Stoelnummer) VALUES (@StoelNummer)"
		Using connection As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)
			Using command As New SqlCommand(cmdText, connection)
				command.Parameters.Add("StoelNummer", Data.SqlDbType.NVarChar)
				connection.Open()
				For Each item As ListItem In CheckBoxListStoelen.Items
					' enkel wegschrijven indien geselecteerd EN enabled (dus nieuw)
					If item.Selected AndAlso item.Enabled Then
						command.Parameters(0).Value = item.Text
						command.ExecuteNonQuery()
						' deze is dus ook niet meer nieuw
						item.Enabled = False
					End If
				Next
				connection.Close()
			End Using
		End Using
	End Sub

	Private Function GetStoelen() As List(Of String)
		Dim lijst As New List(Of String)
		Const cmdText As String = "SELECT StoelNummer FROM Plaats"
		Using connection As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)
			Using command As New SqlCommand(cmdText, connection)
				connection.Open()
				Using reader = command.ExecuteReader
					While reader.Read
						lijst.Add(reader.GetString(0))
					End While
				End Using
				connection.Close()
			End Using
		End Using
		Return lijst
	End Function
 
End Class



Dit gezegd: ik denk dat er intelligenter manieren te bedenken zijn dan met checkboxen om dit te verwezenlijken.

#13 Benno

Benno

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 949 berichten
    Laatst bezocht 10 Aug 2014 13:16
  • LocatieGyor, Magyarország

Geplaatst op 01 March 2013 - 00:14

Ah: in bovenstaande code gebruik ik de ListItem.Value i.p.v. ListItem.Text (want die laat ik leeg).
En dit is het resultaat:
Bijlage  cinema.png   26.07K   10 downloads





Ook met taq Solved, ASP, CheckBoxList voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[Solved] Untitled 1

Hosting provided by Combell
Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
vbib.be - vbnet.be - vbdotnet.be - visualbasic.be