【问题标题】:A list of names with check boxes带有复选框的名称列表
【发布时间】:2013-02-05 01:15:44
【问题描述】:

使用 asp.net 我需要列出名称和 ID,并在每一行都有一个复选框

例如

<table>
    <tr>
        <td>ID</td>
        <td>Name</td>
        <td><input type="checkbox" name="id"/></td>
    </tr>
</table>

但它需要是一个列表视图,并且只需使用一个布局模板。

大概是这样

<asp:ListView runat="server" ID="ListView1">
    <LayoutTemplate>
        <table runat="server" id="table1" >
            <tr runat="server" id="itemPlaceholder" ></tr>
        </table>
    </LayoutTemplate>
    <ItemTemplate>
        <tr id="Tr1" runat="server">
            <td id="Td1" runat="server">
                <asp:Label ID="IdLabel" runat="server" 
                    Text='<%#Eval("CFId") %>' />
            </td>
            <td id="Td2" runat="server">
                <asp:Label ID="NameLabel" runat="server" 
                    Text='<%#Eval("CFName") %>' />
            </td>
            <td id="Td3" runat="server">
                <asp:Checkbox ID="Checkbox" runat="server" 
                    name='<%#Eval("CFId") %>' />
            </td>
        </tr>
    </ItemTemplate>
</asp:ListView>

如何获取它,以便从这样的列表中获取选中复选框的列表?每行都有一个复选框。

【问题讨论】:

  • 仅供参考,您没有使用“asp”。您正在使用“asp.net”。它们不一样。
  • 奥普西我知道。简单的错误
  • 你发布的代码看起来很合理,是不是没有做你想做的事?
  • 我想要所选行的CFIds
  • @SmartLemon,遍历每个ListView 行并使用FindControl 查找标签CFId 并获取该控制值。

标签: asp.net .net listview checkbox


【解决方案1】:

如果我正确理解了您的问题,您可能需要使用System.Web.UI.WebControls.CheckBoxList

var r = from item in list.Items.Cast<ListItem>()
        where i.Selected
        select i.Value;

或在扩展方法语法中相同:

var r = list.Items.Cast<ListItem>()
                  .Where(i => i.Selected)
                  .Select(i => i.Value);

【讨论】:

  • 如何在这个问题的上下文中使用它?我怎样才能获得所有选定的值?如,所选行的CFId
  • @SmartLemon:list.Items.Cast&lt;ListItem&gt;().Where(i =&gt; i.Selected).Select(i =&gt; i.Value) 可能只会返回选中项的值。
  • 我相信这正是我所需要的
  • 我收到错误Unable to cast object of type 'System.Web.UI.WebControls.ListViewDataItem' to type 'System.Web.UI.WebControls.ListItem'.
  • @SmartLemon:抱歉,请使用Cast&lt;ListViewItem&gt;(),而不是我的初始代码。
【解决方案2】:

ASPX:

<asp:ListView runat="server" ID="ListView1">
    <LayoutTemplate>
        <table runat="server" id="table1">
            <tr runat="server" id="itemPlaceholder">
            </tr>
        </table>
    </LayoutTemplate>
    <ItemTemplate>
        <tr id="Tr1" runat="server">
            <td id="Td1" runat="server">
                <asp:Label ID="IdLabel" runat="server" Text='<%#Eval("CFId") %>' />
            </td>
            <td id="Td2" runat="server">
                <asp:Label ID="NameLabel" runat="server" Text='<%#Eval("CFName") %>' />
            </td>
            <td id="Td3" runat="server">
                <asp:CheckBox ID="Checkbox" runat="server" />
            </td>
        </tr>
    </ItemTemplate>
</asp:ListView>
<asp:Button ID="btnGetChecked" runat="server" Text="Get Checked Items" OnClick="GetChecked" />

背后的代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        var table = new DataTable();
        table.Columns.Add("CFId");
        table.Columns.Add("CFName");

        table.Rows.Add("1", "Item 1");
        table.Rows.Add("2", "Item 2");
        table.Rows.Add("3", "Item 3");

        ListView1.DataSource = table;
        ListView1.DataBind();
    }
}

protected void GetChecked(object sender,EventArgs e)
{
    var items = ListView1.Items.Where(i => ((CheckBox)i.FindControl("Checkbox")).Checked);
    foreach (ListViewItem item in items)
    {
        Label IdLabel = item.FindControl("IdLabel") as Label;
        Label NameLabel = item.FindControl("NameLabel") as Label;

        if (IdLabel != null && NameLabel != null)
        {
            string id = IdLabel.Text;
            string name = NameLabel.Text;
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 2014-09-14
    • 1970-01-01
    • 2011-01-21
    • 2014-04-11
    • 1970-01-01
    • 2018-02-14
    相关资源
    最近更新 更多