【问题标题】:How can I pull the checked items from CheckBoxList in a repeater?如何从中继器中的 CheckBoxList 中提取选中的项目?
【发布时间】:2013-06-06 14:12:22
【问题描述】:

我有一个这样构造的转发器“语句”:

<asp:Repeater ID="Statements" runat="server"><ItemTemplate><ul>
    <li>
        <div>
            <asp:Label Text='<%#("Problem Statement: " + Eval("Statement"))%>' runat="server"></asp:Label></div>
        <div>
            <asp:Label Text='<%#("Goal: " + Eval("Goal"))%>' runat="server"></asp:Label></div>
        <asp:CheckBoxList ID="Objectives" runat="server" RepeatDirection="Horizontal" RepeatColumns="2">
        </asp:CheckBoxList>
    </li>
</ul>
</ItemTemplate>
</asp:Repeater>

我试图从重复的CheckBoxList 中提取所有选中的项目,但到目前为止,还没有成功。下面给了我一个无效的转换错误,但我的其他尝试也导致了失败。如何使用 LINQ 从重复列表中提取所有选中的项目?

Dim list = _
  (From c As Control In Me.FindControl("Statements").Controls _
  Where c.GetType() Is GetType(CheckBoxList) _
  Select c).ToList()

Dim selected = _
  From c As CheckBoxList In list.AsEnumerable() _
  Select c.Items.AsQueryable().Cast(Of ListItem).Select(Function(l) l.Selected = True)

提前致谢。

【问题讨论】:

    标签: vb.net linq repeater checkboxlist


    【解决方案1】:

    您可以旋转语句转发器的 RepeaterItems 并使用 linq 抓取所有选定的复选框(仅适用于 AlternatingItem 和 Item 类型)。

            Dim lstAllSelected As New List(Of ListItem)
    
            Statements.Items.ForEach(Sub(rpi As RepeaterItem)
                                         If rpi.ItemType = ListItemType.AlternatingItem OrElse rpi.ItemType = ListItemType.Item Then
                                             Dim lstNewItems As List(Of ListItem) = (From li As ListItem In CType(rpi.FindControl("Objectives"), CheckboxList).Items _
                                                                                     Where li.Selected).ToList()
                                             If Not lstNewItems Is Nothing AndAlso lstNewItems.Count > 0 Then
                                                 lstAllSelected.AddRange(lstNewItems)
                                             End If
                                         End If
                                     End Sub)
    

    【讨论】:

      【解决方案2】:

      这将为您提供从每个转发器项目中选择的ListItems 的列表。

      Dim selected = (From itm As RepeaterItem In Statements.Items
                  From li As ListItem In DirectCast(itm.FindControl("Objectives"), CheckBoxList).Items
                  Where li.Selected
                  Select li).ToList
      

      【讨论】:

        猜你喜欢
        • 2012-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多