1. Instead of hiding a label, I would suggest you use the DataKeys property of the DataList.
2. Your code is partially correct. It is just a matter, where do you add this code. Appropriate place would be the ItemDataBound event of the DataList.
Sub Item_Bound(sender As Object, e As DataListItemEventArgs)
If e.Item.ItemType = ListItemType.Item Or _
e.Item.ItemType = ListItemType.AlternatingItem Then
' Retrieve the Label control in the current DataListItem.
Dim QuestionLabel As Label = _
CType(e.Item.FindControl("QuestionLabel"), Label)
'Retrieve the QuestionID
Dim QuestionID as Integer = Cint(QuestionLabel.Text)
' Retrieve the RadioButtonList
Dim rb As RadioButtonList = CType(e.Item.FindControl("rbn_list"), RadioButtonList)
rb.DataSource = Tier.getAnsForMCQ(QuestionID)
rb.DataBind()
End If
End Sub