如果一个表格的某一列是多个checkbox的list组合,可以采用模板列,在模板列中安放checkboxlist。
首先定义一个gridview,然后加入几列数据,另外再加入一个模板列,用来加载checkboxlist:
<asp:GridView ID="gridview1" runat="server" AutoGenerateColumns="false" Width="100%">
<Columns>
<asp:BoundFiel HeaderText="Location" DataFiel="Location"/> //第一列数据从数据库中读取
<asp:TemplateField HeaderText="Active"> //第二列是模板列,加载radiobutton按钮
<ItemTemplate> //模板列
<asp:RadioButton ID="radioButton1" runat="Server"/> //加载radiobutton按钮
</ItemTemplate>
</ItemStyle HorizontalAlign="Center"> //定义模板列的样式
</asp:TemplateField>
<asp:TemplateField> //定义第三列,仍为模板列,加载CheckBoxList
<ItemTemplate>
<asp:CheckBoxList ID="checkBoxList1" runat="Server"></asp:CheckBoxList>
</ItemTemplate>
</ItemStyle HorizontalAlign="Center">
</asp:TemplateField>
</Columns>
</asp:GridView>
下面就需要给GridView加载数据了。但是需要注意的是,GridView的每一行都有一列是CheckBoxList,为此我们需要在GridView的RowDataBound事件中给CheckBoxList赋值。
首先给GridView加载数据:
Private Sub BindGridView( )
Dim ds As New DataSet( )
ds =...... //从数据库中读取数据
GridView1.DataSource =ds.Table(0)
GridView1.DataBind( ) //数据绑定,此时会调用GridView1_RowDataBound事件
End Sub
然后定义GridView1_RowDataBound事件
Protected 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 chboxlist As New CheckBoxList( ) //声明一个CheckBoxList控件
chboxlist = CType(e.Row.FindControl("checkBoxList1"), CheckBoxList) //寻找GridView中的heckBoxList
Dim ds As New DataSet()
ds.ReadXml(Server.MapPath("XMLFile.xml")) //从xml中读取数据,当然也可从数据库中获取数据
chboxlist.DataSource = ds.Tables(0)
chboxlist.DataTextField = ds.Tables(0).Columns(0).ToString
chboxlist.DataValueField = ds.Tables(0).Columns(1).ToString
chboxlist.DataBind()
End If
End Sub
好了,完成了,运行完毕就可以看到效果了,CheckBoxList已经绑定了。