3
DropDownList
をDataList
にネストするように設計しました。では、選択した値をどのように取得するのですか。DataList内のDropDownListから選択した値を取得
DataList
内のラベルをDropDownList
の選択値で更新したいとします。
protected void DDList_SelectedIndexChanged(object sender, EventArgs e)
{
selectedData.Text = myDropDownList.SelectedValue;
}
ずっと読みになった後、私はこの
(e.Item.FindControl("DDList") as DropDownList).SelectedValue = DataBinder.Eval(e.Item, "Value").ToString();
を見つけしかし、どのように私は、この値を代入します:ユーザーが、私はこのような何かをしたいDropDownList
選択した値
を変更するたびに起こるはず選択した項目が変更されるたびにラベルに追加されますか?
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DataList runat="server" ID="DataList1" OnItemDataBound="DataList1_ItemDataBound" DataKeyField="Class">
<ItemTemplate>
<table>
<tr>
<td>
<label>
<%#Eval("ID")%>:
</label>
</td>
<td>
<label>
<%#Eval("Name")%>
</label>
</td>
<td>
<label>
<%#Eval("Class")%>
</label>
</td>
<td>
<asp:DropDownList runat="server" ID="DDList" OnSelectedIndexChanged="DDList_SelectedIndexChanged"></asp:DropDownList>
</td>
<td>
<asp:Label runat="server" ID="selectedData" ForeColor="Red"></asp:Label>
</td>
</tr>
</table>
<br />
</ItemTemplate>
</asp:DataList>
</div>
</form>
C#コード:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
PopulateData();
}
}
private void PopulateData()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ID", typeof(int)));
dt.Columns.Add(new DataColumn("Name", typeof(string)));
dt.Columns.Add(new DataColumn("Class", typeof(int)));
DataRow dr1 = dt.NewRow();
dr1["ID"] = 1;
dr1["Name"] = "Ishan";
dr1["Class"] = 3;
dt.Rows.Add(dr1);
DataRow dr2 = dt.NewRow();
dr2["ID"] = 2;
dr2["Name"] = "Sumit";
dr2["Class"] = 5;
dt.Rows.Add(dr2);
DataRow dr3 = dt.NewRow();
dr3["ID"] = 3;
dr3["Name"] = "Manish";
dr3["Class"] = 4;
dt.Rows.Add(dr3);
DataList1.DataSource = dt;
DataList1.DataBind();
}
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
var myDropDownList = e.Item.FindControl("DDList") as DropDownList;
int currentItemID = int.Parse(this.DataList1.DataKeys[e.Item.ItemIndex].ToString());
myDropDownList.DataSource = PopulateDDList(currentItemID);
myDropDownList.DataValueField = "ID";
myDropDownList.DataTextField = "Value";
myDropDownList.DataBind();
(e.Item.FindControl("DDList") as DropDownList).SelectedValue = DataBinder.Eval(e.Item, "Value").ToString();
}
}
private DataTable PopulateDDList(int count)
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ID", typeof(int)));
dt.Columns.Add(new DataColumn("Value", typeof(string)));
for(int i = 0; i < count; i++)
{
DataRow dr = dt.NewRow();
dr["ID"] = i;
dr["Value"] = Convert.ToString(i+1);
dt.Rows.Add(dr);
}
return dt;
}
}
あなたが提案したコードはうまくいくようですが、意図したとおりではありません。 ** selectedData **ラベルの値はまったく更新されません。 _postback_と何か関係がありますか?私はそれを本当のように設定しようとしたので、それはどちらもうまくいかないようです。 –
はい、スニペット全体でテストしました。私が変更しなければならなかったのは、dropdownllstの 'AutoPostBack = true'だけでした。 .SelectedValue = DataBinder.Eval(e.Item、 "Value")。ToString(); 'はエラーを出しました。 – VDWWD
ヘルプがありがとうございました。私は、** AutoPostBack = "true" **をasp:DropDownListの定義に追加するだけでした –