1

所以我有这个:

    <asp:ListView runat="server" ID="lvAttributes" DataKeyNames="attribute_id" OnItemDataBound="lvAttributes_ItemDataBound">
        <ItemTemplate>
            <label class="title">product <%# Eval("name") %></label>
            <asp:ListBox DataTextField="value" DataValueField="tag_id" CssClass="chzn-select"
                runat="server" ID="lbAttributeTags"></asp:ListBox>
            <br />
        </ItemTemplate>
        <LayoutTemplate>
            <div id="itemPlaceholder" runat="server"></div>
        </LayoutTemplate>
    </asp:ListView>

现在在回发时,我想获取每个单独的 lbAttributeTags 选定值。但正如您所知,可能会生成一个或 100 个 ListBox。那么对于许多潜在的可能性,我应该如何解决这个问题呢?

提前致谢。

4

1 回答 1

1

在这里,您有从列表视图控件内的 ListBox 获取所选项目的代码

 <form id="form1" runat="server">
<div>
</div>
<asp:ListView runat="server" ID="lvAttributes" DataKeyNames="attribute_id" OnItemDataBound="lvAttributes_ItemDataBound">
    <ItemTemplate>
        <label class="title">product <%# Eval("name") %></label>
        <asp:ListBox DataTextField="value" DataValueField="tag_id" CssClass="chzn-select"
            runat="server" ID="lbAttributeTags"></asp:ListBox>
        <asp:Button ID="btnInsideLV" runat="server" Text="Inside LV Click" OnCommand="btnInsideLV_Click" CommandArgument='<%# Container.DataItemIndex + 1 %>' /><br />
    </ItemTemplate>
    <LayoutTemplate>
        <div id="itemPlaceholder" runat="server"></div>
    </LayoutTemplate>
</asp:ListView>
<asp:Button ID="btnSample" runat="server" Text="Click" OnClick="btnSample_Click" />
<asp:Label ID="lblDisplay" runat="server" />
<asp:Label ID="lblSelectedRowValue" runat="server" />
</form>

C#:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class stackoverflow_12761515 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("name");
            dt.Columns.Add("attribute_id");

        for (int i = 0; i < 5; i++)
        {
            DataRow dr = dt.NewRow();
            dr["attribute_id"] = i + 1;
            dr["name"] = "item " + i + 1;

            dt.Rows.Add(dr);
        }
        lvAttributes.DataSource = dt;
        lvAttributes.DataBind();

        //BindListBox();
    }
}

private void BindListBox(ListBox lb)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("value");
    dt.Columns.Add("tag_id");

    for (int i = 0; i < 5; i++)
    {
        DataRow dr = dt.NewRow();
        dr["tag_id"] = i + 1;
        dr["value"] = "value " + i + 1;

        dt.Rows.Add(dr);
    }

    //ListBox lb = (ListBox)lvAttributes.FindControl("lbAttributeTags");
    lb.DataSource = dt;
    lb.DataTextField = "value";
    lb.DataValueField = "tag_id";
    lb.DataBind();
}


protected void lvAttributes_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    ListBox lb = (ListBox)e.Item.FindControl("lbAttributeTags");
    BindListBox(lb);
}

protected void btnSample_Click(object sender, EventArgs e)
{
    lblDisplay.Text = string.Empty;
    for (int i = 0; i < lvAttributes.Items.Count; i++)
    {
        ListBox lb = (ListBox)lvAttributes.Items[i].FindControl("lbAttributeTags");
        if (lb.SelectedIndex != -1)
        {
            lblDisplay.Text += lb.SelectedItem.Text + "\n";
        }

    }
}
protected void btnInsideLV_Click(object sender, CommandEventArgs e)
{
    int selectedRow = Convert.ToInt32(e.CommandArgument.ToString());
    ListBox lbCurrent = (ListBox)lvAttributes.Items[selectedRow - 1].FindControl("lbAttributeTags");
    if (lbCurrent.SelectedIndex != -1)
    {
        lblSelectedRowValue.Text = "Row selected is : " + selectedRow + " and list item is : " + lbCurrent.SelectedItem.Text;
    }
    else
    {
        lblSelectedRowValue.Text = "no item selected";
    }
}

}

2 按钮单击事件具有您需要的代码。如果您需要其他任何东西,请告诉我。

于 2012-10-07T19:13:16.060 回答