Originariamente inviato da Skyscraper84
La popolo manualmente...
Altrimenti potrei creare una Array e ad ogni inserimento di un nuovo item scrivo l'indice dell'item ed il relativo ID del DB corrispondente.

Che ne pensate?
Che è quello che ti ho proposto... ...solo che con l' array devi andare alla "ricerca" dei tuoi valori.

X jupynet
I tuoi esempi sono ottimi ma per come ho inteso il problema sono troppa roba..., nel senso che usando la Dictionary bastano poche righe di codice senza usare DataTable o Classi.
Una volta popolata la Dictionary con (TKey, Value) = ("testo email", ID) per gli Items della listbox basta impostarne il DataSorce = la proprietà Keys.ToArray del dizionario, mentre in base all' Item selezionato si risale all' ID semplicemente con "dizionario(item della listbox selezionato)".
codice:
    Private Sub Form1_Load() Handles MyBase.Load
        'simulazione lettura DB
        dizionarioAdd("qui", 1)
        dizionarioAdd("quo", 2)
        dizionarioAdd("qua", 3)
        dizionarioAdd("pippo", 4)
        dizionarioAdd("pippo", 5)
        dizionarioAdd("paperino", 6)
    End Sub

    Private Sub dizionarioAdd(ByVal ogg_email As String, ByVal ID As Integer)
        If dizionario.Keys.Contains(ogg_email) Then
            ogg_email = ogg_email & "(doppio)"
        End If
        dizionario.Add(ogg_email, ID)
        ListBox1.DataSource = dizionario.Keys.ToArray
    End Sub

    Private Sub Button1_Click() Handles Button1.Click
        Console.WriteLine(ottieniID)
    End Sub

    Private Function ottieniID() As Integer
        Return dizionario(ListBox1.SelectedItem)
    End Function