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が生成される可能性があります。では、多くの潜在的な可能性について、このソリューションにどのようにアプローチする必要がありますか?

前もって感謝します。

4

1 に答える 1

1

ここに、リスト ビュー コントロール内の ListBox から選択した項目を取得するコードがあります。

asp.net

 <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 に答える