Whenever you are getting data from a database you should always check that the query has returned something before attempting to use it. For example
Protected Sub DDOFIREF_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles DDOFIREF.SelectedIndexChanged
Dim dv As New Data.DataView
dv = AccessDataSource3.Select(DataSourceSelectArguments.Empty)
If dv.Table.Rows.Count > 0 Then
LblUser.Text = dv.Table.Rows(0)("UserN")
LblDept.Text = dv.Table.Rows(0)("Dept")
lblroot.Text = dv.Table.Rows(0)("Root")
lblassign.Text = dv.Table.Rows(0)("AssignTo")
txtdetails.Text = dv.Table.Rows(0)("Details")
txtctc.Text = dv.Table.Rows(0)("CostCompany")
lblref2.Text = dv.Table.Rows(0)("ref")
DDCat.Text = If(IsDBNull(dv.Table.Rows(0)("Category")), DDCat.SelectedItem.ToString = "Select one", dv.Table.Rows(0)("Category"))
txtact.Text = If(IsDBNull(dv.Table.Rows(0)("Action")), String.Empty, dv.Table.Rows(0)("action"))
txtofi.Text = If(IsDBNull(dv.Table.Rows(0)("OfiNotes")), String.Empty, dv.Table.Rows(0)("OfiNotes"))
End If
End Sub
Simply put, if there are no rows returned then
Rows(0)
does not exist (nor Rows(1), Rows(2) etc) - and there is your exception being thrown.
It's worth checking how you have configured the AccessDataSource control - try running the query directly against the database to see what you get back.