读取Repeater中CheckBoxList的选中项

时间:2013-08-27 16:17:22

标签: c# asp.net

也许是一个愚蠢的问题,但我需要一些帮助,以便在发布表单时如何读取转发器中的复选框值。我有一个表单,在这个表单中我有一个Repeater,在每个ItemTemplate中我有一个CheckBoxList。这是我的代码有点简化:

<form method="post">
    <asp:Repeater runat="server" ID="FormInputValues">
        <ItemTemplate>
            <asp:CheckBoxList runat="server" ID="CheckBoxValues"
                DataSource='<%# ((FormOptions)Container.DataItem).Options %>' />
        </ItemTemplate>
    </asp:Repeater>
    <br />
    <asp:LinkButton ID="SelectorNext" CssClass="button" OnClick="SelectorNext_Click"
        Text="Next" runat="server" />
</form>

我的问题是我需要能够将每个CheckBoxList中的所有已检查项目及其相关数据项映射。类似这样的内容:

Dictionary<"DataItem.ID", List<"CheckBox.Value">>

我无法找到一个好方法,所以如果有人有任何建议,我会非常感激!

2 个答案:

答案 0 :(得分:0)

尝试使用代码:

for(int i = 0; i < FormInputValues.Items.Count; i++)
{
 CheckBoxList chklist = (CheckBoxList)FormInputValues.Items[i].FindControl("CheckBoxValues");
}

您将获得CheckBoxList对象中的每个chklist,您可以遍历它以获取所选复选框。

您可以使用以下代码遍历CheckBoxList

foreach (ListItem listItem in clbIncludes.Items)
{
    if (listItem.Selected) { 
    //do some work 
}
    else { 
    //do something else 
    }
}

其中clbIncludesCheckBoxList

您可以在foreach循环内使用for循环来实现所需的功能。

答案 1 :(得分:0)

试试这个:

Protected function repeater1_ItemCreated(Object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
      CheckBoxList checkBoxValues = (CheckBoxList)e.Item.FindControl("CheckBoxValues");
      String selectedValue = checkBoxValues.SelectedValue;
      //Do your stuff ...
    }
}

ItemCreated事件是您需要的事件,在那里您可以更改每个中继器项目的外观。

另一个答案也是正确的,但是这个例子性能更高,因为您不需要遍历所有转发器项,也不需要遍历CheckBoxList中的每个复选框。