[英]How to get the value of dropdownlist on selection changed inside the repeater.
我在轉發器中有四列,Expected,Accpet,DDL和一個面板,該頁面在頁面加載時不可見
如果Expect列值和下拉選擇值相同,則只有我要顯示該面板,否則不希望。
請幫我,由於選擇更改,整個中繼器沒有重新填充我無法獲得的單個值,因此我沒有獲得dropdownlist的值。 誰能幫我這個忙。
任何可能的方式都會為我做。
的CSS
<style>
.main
{
width: 100%;
}
.inner
{
width: 90%;
}
.fst
{
width: 20%;
float: left;
}
.scnd
{
width: 20%;
float: left;
}
.thrd
{
width: 20%;
float: left;
}
.frth
{
width: 20%;
float: left;
}
.reset-this
{
clear:both;
}
</style>
的HTML
<div class="main">
<div class="inner">
<div class="fst">
Except
</div>
<div class="scnd">
Accpet
</div>
<div class="thrd">
DDL
</div>
<div class="frth">
Panel
</div>
<div class="reset-this">
</div>
</div>
<div class="reset-this">
</div>
<br />
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
<ItemTemplate>
<div class="inner">
<div class="fst">
<asp:Label ID="Label1" runat="server" Text='<%# Eval("Expected") %>'></asp:Label>
</div>
<div class="scnd">
<asp:Label ID="Label2" runat="server" Text='<%# Eval("accpet") %>'></asp:Label>
</div>
<div class="thrd">
<asp:DropDownList ID="DropDownList3" AutoPostBack="true" runat="server" OnSelectedIndexChanged="DropDownList3_SelectedIndexChanged">
<asp:ListItem Text="Select" Value="-1"></asp:ListItem>
<asp:ListItem Text="50"></asp:ListItem>
<asp:ListItem Text="51"></asp:ListItem>
<asp:ListItem Text="52"></asp:ListItem>
<asp:ListItem Text="53"></asp:ListItem>
<asp:ListItem Text="100"></asp:ListItem>
</asp:DropDownList>
</div>
<div class="frth">
<asp:Panel ID="Panel1" runat="server">
<asp:DropDownList ID="DropDownList2" runat="server">
<asp:ListItem Text="Succesful"></asp:ListItem>
</asp:DropDownList>
</asp:Panel>
</div>
<div class="reset-this">
</div>
<br />
</div>
</ItemTemplate>
</asp:Repeater>
</div>
代碼背后
protected void Page_Load(object sender, EventArgs e)
{
GetDAtaset();
}
public void GetDAtaset()
{
DataSet ds = new DataSet();
DataTable dt = new DataTable("warehouseTable");
dt.Columns.Add(new DataColumn("Expected", typeof(string)));
dt.Columns.Add(new DataColumn("accpet", typeof(string)));
DataRow dr = dt.NewRow();
dr["Expected"] = "100";
dr["accpet"] = "50";
dt.Rows.Add(dr);
DataRow dr1 = dt.NewRow();
dr1["Expected"] = "50";
dr1["accpet"] = "25";
dt.Rows.Add(dr1);
ds.Tables.Add(dt);
Repeater1.DataSource = ds;
Repeater1.DataBind();
}
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
((Panel)(e.Item.FindControl("panel1"))).Visible = false;
}
protected void DropDownList3_SelectedIndexChanged(object sender, EventArgs e)
{
for (int i = 0; i < Repeater1.Items.Count; i++)
{
Panel pnl_active = Repeater1.Items[i].FindControl("panel1") as Panel;
Label Expected = Repeater1.Items[i].FindControl("Label1") as Label;
DropDownList DDLValue = Repeater1.Items[i].FindControl("DropDownList3") as DropDownList;
if (DDLValue.SelectedItem.ToString() == Expected.ToString())
{
pnl_active.Visible = true;
}
}
}
您需要做幾件事:
首先,將其添加到您的Page_Load
方法中,以避免重置Repeater的值:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GetDAtaset();
}
}
接下來,將DropDownList3_SelectedIndexChanged
方法修改為如下所示:
protected void DropDownList3_SelectedIndexChanged(object sender, EventArgs e)
{
for (int i = 0; i < Repeater1.Items.Count; i++)
{
Panel pnl_active = Repeater1.Items[i].FindControl("panel1") as Panel;
Label Expected = Repeater1.Items[i].FindControl("Label1") as Label;
DropDownList DDLValue = Repeater1.Items[i].FindControl("DropDownList3") as DropDownList;
//You need to compare the SelectedItem.Text with the label Expected.Text
if (DDLValue.SelectedItem.Text == Expected.Text)
{
pnl_active.Visible = true;
}
}
}
請注意,您正在將DDLValue.SelectedItem與標簽Expected進行比較,這是不正確的,因為您需要將DDLValue.SelectedItem.Text與標簽Expected.Text進行比較。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.