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">
答案 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;
}