我对usercontrols相当新。到目前为止,我发现它们对于处理大量重复用户输入字段非常有用。但是,我在预控制控件中的下拉列表时遇到问题。我在我的ascx页面添加了一个ddl然后绑定了ddl并将其公开:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List<Travel_CarSize> tc = Travel_CarSizes.GetCarSizes();
ddlCarSize.DataSource = tc;
ddlCarSize.DataTextField = "CarSize";
ddlCarSize.DataValueField = "CarSizeID";
ddlCarSize.DataBind();
}
}
public string CarSize
{
get { return ddlCarSize.SelectedValue.ToString(); }
set { ddlCarSize.SelectedIndex = ddlCarSize.Items.IndexOf(ddlCarSize.Items.FindByValue(value)); }
}
然而,当我以编程方式尝试在控件中设置ddl的选择时,我总是设置它然后绑定它。在我的aspx.cs文件中,我设置了:
CarControl1.CarSize = "3";
该程序旨在显示一个空的usercontrol(带有数据绑定ddl)和gridview。用户选择gridview条目,并且该usercontrol将填充数据。所以ddl从一开始就被绑定,然后发生导致“预选”ddl的事件。
如果这没有给我结果我正在寻找我在if(!IsPostBack)上设置断点,ddlCarSize.DataBind();和集{}。我运行程序,它绑定我的ddl,我在gridview中做出选择。当我点击选择时我发现它在用户控件中命中if(!IsPostBack)并说“哦,这是一个回发,不要进入if。”然后它命中集{}但是ddl现在是空的。然后它再次点击if(!IsPostBack)并且由于某种原因现在说它不是回发并重新绑定ddl。
我认为这是一个非常常见的问题,但我还没有找到解决方案。任何帮助将不胜感激。
答案 0 :(得分:2)
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Bind()
}
}
public Bind()
{
if (ddlCarSize.Items.Count == 0)
{
List<Travel_CarSize> tc = Travel_CarSizes.GetCarSizes();
ddlCarSize.DataSource = tc;
ddlCarSize.DataTextField = "CarSize";
ddlCarSize.DataValueField = "CarSizeID";
ddlCarSize.DataBind();
}
}
public string CarSize
{
get { return ddlCarSize.SelectedValue.ToString(); }
set
{
Bind();
ddlCarSize.SelectedIndex = ddlCarSize.Items.IndexOf(ddlCarSize.Items.FindByValue(value)); }
}