2010-11-11 48 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

相關問題