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.
Codice:
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