Вы можете использовать TemplateField и событие RowDataBound GridView для достижения того, что вы хотите.Вот полный пример:
ASPX:
<asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="ChkMyBitColumn" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Код позади:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
'create some Testdata'
BindGrid()
End If
End Sub
Private Sub BindGrid()
Dim tbl As New DataTable
Dim rnd As New Random
tbl.Columns.Add(New DataColumn("MyBitColumn", GetType(Boolean)))
For i As Int32 = 1 To 10
Dim row As DataRow = tbl.NewRow
row("MyBitColumn") = rnd.Next(1, 3) Mod 2 = 0 'get a random boolean'
tbl.Rows.Add(row)
Next
Me.GridView1.DataSource = tbl
Me.GridView1.DataBind()
End Sub
Private Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
Dim row = DirectCast(e.Row.DataItem, DataRowView).Row
Dim MyBitColumnValue = DirectCast(row("MyBitColumn"), Boolean)
Dim ChkMyBitColumn = DirectCast(e.Row.FindControl("ChkMyBitColumn"), CheckBox)
ChkMyBitColumn.Checked = MyBitColumnValue
ChkMyBitColumn.Enabled = Not ChkMyBitColumn.Checked
End If
End Sub