2010-11-11 106 views
0

我对用户控件相当陌生。到目前为止,我发现它们对于处理大量重复的用户输入字段非常有用。但是,我在控件中预填充下拉列表时遇到问题。我一个DDL添加到我的ascx页面,然后我绑定的DDL和揭露它:在usercontrol的下拉列表中设置选定的索引

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文件I设置:

CarControl1.CarSize = "3"; 

该计划的目的是显示一个空的用户控件(与数据绑定DDL)和一个gridview。用户选择一个GridView条目,并且该用户控件获取数据。因此,ddl从一开始就受到约束,然后发生导致“预选”ddl的事件。

当这并没有给我我找的结果我把一个断点放在if(!IsPostBack),ddlCarSize.DataBind();和集合{}。我运行该程序,它绑定我的ddl,并在gridview中做出选择。当我点击select时,我发现它碰到了usercontrol中的if(!IsPostBack),并且说:“哦,这是回传,不要进入if。”那么它会击中set {},但ddl现在是空的。然后它再次击中if(!IsPostBack),并由于某种原因现在说它不是回发并重新绑定ddl。

我认为这是一个很常见的问题,但我还没有找到解决方案。任何帮助将不胜感激。

回答

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)); } 
} 
+0

猎人,你是我的新个人英雄。这是一个简单的解决方案,它从来没有跨过我的脑海。谢谢。 – Jeremy 2010-11-11 15:45:08

+0

很高兴我能帮忙! – hunter 2010-11-11 16:14:08

相关问题