ここに、リスト ビュー コントロール内の 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 ボタン クリック イベントには、必要なコードが含まれています。他に何か必要な場合はお知らせください。