如何将CheckBoxList绑定到BitArray?

时间:2017-07-14 17:32:29

标签: c# asp.net binding checkboxlist bitarray

CheckBoxList包含项目:

<asp:CheckBoxList ID="RadCheckBoxList1" runat="server" RepeatDirection="Horizontal"
    RepeatLayout="Flow">
    <Items>
        <asp:ListItem Text="" Value="1" />
        <asp:ListItem Text="" Value="2" />
        <asp:ListItem Text="" Value="3" />
    </Items>
</asp:CheckBoxList>

在C#代码中绑定时:

BitArray ba = new BitArray(3);
ba[0] = false;
ba[1] = true;
ba[2] = false;
cbl.DataSource = ba;
cbl.DataBind();

我期待: to see just marked checkboxes with no text

但结果却是: Boolean values went to label texts

我不需要标签文字。只需要通过BitArray项的布尔值设置复选框标记。 如果它是大约有600个CheckBoxList控件,每个控件有大约20个复选框。因此,制作单独的课程会降低网页的性能。 BitArray项的属性名是什么来绑定它CheckBoxList或如何有效地绑定它?

编辑: 感谢combatc2设置

cb1.DataTextFormatString =  " ";

我摆脱了标签文本,但复选框仍未正确设置。而不是正确设置“已检查”属性:

<input name="cbl3$1" id="cbl3_1" type="checkbox" value="">
<input name="cbl3$0" id="cbl3_0" type="checkbox" checked="checked" value="">

错误地设置了“值”属性:

<input name="cbl2$0" id="cbl2_0" type="checkbox" value="False">
<input name="cbl2$1" id="cbl2_1" type="checkbox" value="True">

2 个答案:

答案 0 :(得分:1)

在调用DataBind()之前添加以下代码:

cb1.DataTextFormatString =  " ";

它们应该是 - 如果你循环通过项目(比如点击按钮),你应该看到值已正确设置:

protected void OnClick(object sender, EventArgs e)
{
    foreach (ListItem item in cb1.Items)
    {
        var result = bool.Parse(item.Value);    
        System.Diagnostics.Debug.WriteLine(result);            
    }
}

答案 1 :(得分:0)

您只是绑定数据。如果您想设置值,您还必须循环这些值。您可以使用返回完整RadioButtonList的方法。这样你就不必将每个列表分开循环。

PlaceHolder1.Controls.Add(getCompleteRadioButtonList(ba));

public RadioButtonList getCompleteRadioButtonList(BitArray ba)
{
    //create a new radiobuttonlist
    RadioButtonList rbl = new RadioButtonList();

    //do the binding
    rbl.DataSource = ba;
    rbl.DataTextFormatString = " ";
    rbl.DataBind();

    //loop the values to set the items that were just bound
    for (int i = 0; i < ba.Count; i++)
    {
        rbl.Items[i].Selected = ba[i];
    }

    //return the list
    return rbl;
}