PDA

View Full Version : [ASP] Popolare e selezionare un item su ListBox()...


race2
01-07-2002, 12:01
Su ASP.NET:


Ho un ListBox() che popolo nel seguente modo:


Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

'popolo la ListBox Categorie
Dim ID As Integer
Dim Cat As String
conn.Open()
Dim sql As String = "SELECT * FROM Categorie"
Dim comm As New OleDbCommand(sql, conn)
Dim read As OleDbDataReader = comm.ExecuteReader
While read.Read()
ID = read("Id")
lsbCat.Items.Add(read("Cat"))
End While
conn.Close()

End Sub


lsbCat.Items.Add(read("Cat")) questa e' la riga che uso per popolare, e fin qui mi funziona.

Poi voglio selezionare un Item e fare popolare un altra ListBox() con l'Item selezionato dalla prima, e faccio nel segiente modo:


Private Sub lsbCat_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lsbCat.SelectedIndexChanged

'popolo la ListBox SubCategorie
Dim ID As Integer = lsbCat.SelectedItem.Value
Dim IDC As Integer
Dim IDS As Integer
Dim SubCat As String
conn.Open()
Dim sql As String = "SELECT * FROM SubCategorie WHERE IDC = " & ID & ""
Dim comm As New OleDbCommand(sql, conn)
Dim read As OleDbDataReader = comm.ExecuteReader
While read.Read()
IDS = read("Id")
IDC = read("IDC")
lsbSubCat.Items.Add(read("SubCat"))
End While
conn.Close()

End Sub



E qui non mi funziona ......!!!!!
al momento che seleziono un Item dalla prima ListBox() non mi si popola la seconda, vorrei popolare la seconda dato l'ID della prima,

come devo fare ???

tas
01-07-2002, 13:30
In Page_Load non hai salvato Id, lo hai solo memorizzato temporaneamente nella variabile ID che poi verrą sovrascritta dal ciclo successivo.

Soluzione: scrivi una classe che derivi da ListViewItem e aggiungi una proprietą ItemData per memorizzare questo dato.


Public Class MyListViewItem
Inherits ListViewItem

Private m_itemdata As Long

Public Property ItemData() As Long
Get
Return m_itemdata
End Get
Set(ByVal Value As Long)
m_itemdata = Value
End Set
End Property
End Class

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

'popolo la ListBox Categorie
Dim Cat As String
Dim mlvi As MyListViewItem

conn.Open()
Dim sql As String = "SELECT * FROM Categorie"
Dim comm As New OleDbCommand(sql, conn)
Dim read As OleDbDataReader = comm.ExecuteReader
While read.Read()
mlvi = New MyListViewItem
mlvi.ItemData = read("Id")
mlvi.Text = read("Cat")
lsbCat.Items.Add(mlvi)
End While
conn.Close()
End Sub

race2
01-07-2002, 13:34
OK perfetto!!!

ti ringrazio per ora , ciao!!!

race2
01-07-2002, 13:36
Inherits ListViewItem

mi dice "Non definito".......

ma se lo tolgo???

race2
01-07-2002, 14:09
Ho ripreso questa classe:


Private m_id As Long
Private m_text As String
Public Overrides Function ToString() As String
Return m_text
End Function
Public Sub New(ByVal Text As String, ByVal Value As Long)
m_text = Text
m_id = Value
End Sub
Public Property Value() As Long
Get
Return m_id
End Get
Set(ByVal Value As Long)
m_id = Value
End Set
End Property
Public Property Text() As String
Get
Return m_text
End Get
Set(ByVal Value As String)
m_text = Value
End Set
End Property


Ma se io ho tre campi???

ID - Categoria - IDC

con la classe che ho inserito qui sopra come posso raccogliere i tre valori e poi gestirmeli ???

tas
02-07-2002, 22:11
Non puoi usare questa classe come con un controllo ListBox.
Con la ListView, o usi la classe predefinita ListViewItem, oppure crei una classe ereditata da ListViewItem.