我的asp.net页面上有一个Repeater Control
,我在转发器控件中有一些标签和一个dropdownlist
。默认内容填入Item_Bound
事件的标签和下拉列表中。现在我想实现以下目标:
我的问题是,由于我的默认内容来自item_bound
,因此它总是超越下拉列表中的内容,但是如果我将!IsPostBack
条件放在Item_Bound事件中,那么选择下拉列表没有任何反应。
我使用过OnSelectedIndexChange事件,只是在事件中提供了Response.Write,但是当DropDownlist值覆盖自身时,我没有得到任何响应。
任何人都可以帮我解释如何解决这个问题。
更新了问题:
好了,现在我可以使用下拉列表中的selectedItems从转发器标签中获取结果,但现在我的问题是我在转发器中绑定了多个结果,即每行每个下拉列表,但是当我从另一行选择项目时,它仍然假定第一行的值。这是我的参考代码:
protected void drpQuantity_SelectedIndexChanged(object sender, EventArgs e) //DropDown inside repeater control.
{
foreach (RepeaterItem item in rptLatestProducts.Items)
{
if (item.ItemType == ListItemType.Item)
{
HiddenField hd = item.FindControl("hdProductId") as HiddenField;
DropDownList drp = item.FindControl("drpQuantity") as DropDownList;
Label mrp = item.FindControl("lblMRP") as Label;
Label ourPrice = item.FindControl("lblOurPrice") as Label;
Label discount = item.FindControl("lblDiscount") as Label;
ScriptManager.RegisterStartupScript(updPriceByUnits, this.GetType(), "alert", "alert('" + hd.Value + "')", true); //Always returns product id of the first row.
objPackage.ProductId = Convert.ToInt32(hd.Value);
objPackage.TownId = objPackage.DefaultTown;
int discountPercent = Convert.ToInt32(objPackage.GetProductPackages().Select("unit=" + drp.SelectedValue + " and productid=" + hd.Value)[0]["Discount"].ToString());
mrp.Text = "<span class='rupee' style='font-size:14px;'>Rs</span>" + objPackage.GetProductPackages().Select("unit=" + drp.SelectedValue + " and productid=" + hd.Value)[0]["MRP"].ToString();
ourPrice.Text = "<span class='rupee' style='font-size:14px;'>Rs</span>" + objPackage.GetProductPackages().Select("unit=" + drp.SelectedValue + " and productid=" + hd.Value)[0]["Price"].ToString();
mrp.Visible = (mrp.Text != ourPrice.Text);
if (discountPercent > 0)
{
discount.Visible = true;
discount.Text = objPackage.GetProductPackages().Select("unit=" + drp.SelectedValue + " and productid=" + hd.Value)[0]["Discount"].ToString() + "% OFF";
}
else
{
discount.Visible = false;
}
}
}
}
任何人都可以帮助我这个
答案 0 :(得分:3)
听起来好像是把!Page.IsPostBack
放在错误的代码位置。
您需要将其放在DataBind
代码旁边。所以;
if (!Page.IsPostBack){
this.myRepeater.DataSource = [yourdatasource];
this.myRepeater.DataBind();
}
这样您的DropDownList
控件就不会反弹。