Ok, let's use a template column for your link. In order to know what line was clicked, we have to make use of the datagriditemindex -- that'll tell us what we need to know.
In order to do that, we'll programatically add the hyperlink column to the grid in the itemDataBound event of the datagrid. If you're not familiar, that event fires on every row of the grid as it's bound, and it's the perfect time to "tweak" things to get them looking or acting correctly.
So, make your template column look like this:
<asp:TemplateColumn headertext="Navigation">
<ItemTemplate>
</ItemTemplate>
</asp:TemplateColumn>
Nothing there at design time. I'll assume that you've declared that as the first column (0) in your datagrid. With that assumption, you'll need this function in your code-behind:
Protected Sub addHyperLinkColumn(ByVal o As Object, ByVal e As DataGridItemEventArgs) Handles myGrid.ItemDataBound
Dim newLink As New HyperLink()
newLink.Text = "Click Here"
Dim sb As New StringBuilder()
sb.Append("javascript:redirect("

sb.Append(e.Item.ItemIndex.ToString())
sb.append(",'"

sb.append(e.item.cells(4).text)
sb.Append("');"

newLink.NavigateUrl = sb.ToString()
e.Item.Cells(0).Controls.Add(newLink)
End Sub
Pretty easy to follow what's going on there, I hope. The only somewhat abstract part of it is where we get the item index and the fourth value. It comes to us in the form of the 'e' argument for the function, and we just extract what we want from it. basically, you have the whole datagrid row in that argument, and you pull values from it as I've shown.
I also picked up the fourth column's value and we're going to send that along to our function, as well.
Now, I just called our own custom client side function, redirect, which might look like this:
<script language=javascript>
function redirect(itemIndex,val){
document.forms[0].clickedItem.value = itemIndex;
document.forms[0].theOtherValue.value = val;
document.forms[0].submit();
}
</script>
So then, you'll need your own form elements on the page called 'clickedItem' and 'theOtherValue', since that's where we'll store the user's click position and that other value you want.
<input type=hidden name=clickedItem>
<input type=hidden name=theOtherValue>
Easy enough. So now we have provided unique links on each row that will tell us what row the user clicked and what the fourth column on that row contained. We're home free.
Just as an aside, I showed you how to get the item index, but I'm not going to use it, since we already have that fourth item's value. You could have used the item index to pull it from the underlying datasource if you had wanted to (along with a host of other useful stuff, which is why I indluded it for you):
So... in your page load:
dim fourthValue, newLocation as string
if page.ispostback then
fourthValue = request.form("theOtherValue"

session("fourthValue"

= fourthValue
'now, for your original question:
newLocation = yourListBox.selectedItem.value
response.redirect(newLocation)
end if
That is assuming that you put the actual url in the value attribute of your list box -- but I think you get the point either way, yes?
Let me know if any of this was unclear.
Good luck!

paul