Я думаю, вам не хватает атрибута DataField
. Вот мой дизайнерский код из аналогичной реализации.
<asp:GridView ID="GridView1" HeaderStyle-BackColor="#3AC0F2" HeaderStyle-ForeColor="White"
runat="server" AutoGenerateColumns="false" >
<Columns>
<asp:BoundField DataField="Id" HeaderText="Id" ItemStyle-Width="30"/>
<asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="150"/>
<asp:BoundField DataField="Country" HeaderText="Country" ItemStyle-Width ="150"/>
</Columns>
</asp:GridView>
Затем в коде позади.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
Dim dt As New DataTable()
dt.Columns.AddRange(New DataColumn() {New DataColumn("Id", GetType(Integer)), New DataColumn("Name", GetType(String)), New DataColumn("Country", GetType(String))})
dt.Rows.Add(1, "John Hammond", "United States")
dt.Rows.Add(2, "Mudassar Khan", "India")
dt.Rows.Add(3, "Suzanne Mathews", "France")
dt.Rows.Add(4, "Robert Schidner", "Russia")
GridView1.DataSource = dt
GridView1.DataBind()
End Sub