I have looked into this and it appears that because of data binding, the values returned in the SelectedItems list are DataRowView objects. Each of which contains the DataRow of the data source as a member. So the following code will list your items.
foreach (DataRowView rowview in listBox1.SelectedItems)
{
int index = dataGridView1.Rows.Add();
var itemid = rowview["ItemID"].ToString();
var itemname = rowview["ItemName"].ToString();
dataGridView1.Rows[index].Cells["Column1"].Value = itemid;
dataGridView1.Rows[index].Cells["Column2"].Value = itemname);
}
I suspect this is not actually the proper way to do it but my knowledge of data binding is rather sketchy at best.
[edit]
Updated with improved code, thanks to Keith Shirogane.
[/edit]