2010-11-30 31 views
3

我在包含名爲ddlAggerationUnitId的DropDownList的自定義用戶控件中有以下代碼。 DropDownList在Page_Load()事件上是DataBind的。 「價值」設置爲40,它是存在的。如果我刪除了set方法的邏輯,頁面將加載並選擇正確的項目,但是如果值爲假,頁面會引發異常。我想通過在設置它之前查看該值是否存在來避免這種異常,因此爲什麼邏輯是必需的。ASP.NET上的FindByValue DropDownList

現在看起來編譯器正在評估if語句爲false,即使我知道它應該是真的。

public long? Value 
{ 
    get { return Int64.Parse(ddlAggerationUnitId.SelectedItem.Value); } 
    set 
    { 
     if (ddlAggerationUnitId.Items.FindByValue(value.ToString()) != null) 
     { 
      ddlAggerationUnitId.SelectedValue = value.ToString(); 
     } 
    } 
} 

任何幫助將不勝感激!謝謝!

編輯:這是我的Page_Load()事件:

protected void Page_Load(object sender, EventArgs e) 
{ 
    ddlAggerationUnitId.DataSource = ExternalAccount.GetAggregationUnits(); 
    ddlAggerationUnitId.DataTextField = "Value"; 
    ddlAggerationUnitId.DataValueField = "Key"; 
    ddlAggerationUnitId.DataBind(); 
} 
+0

我們可以看到您的Page_Load你在哪裏設置值和數據綁定? – Marcie 2010-11-30 18:20:37

+0

使用try catch環繞它,並在catch ddlAggerationUnitId.SelectedValue = -1中執行此操作。只是一個解決辦法。 – franklins 2010-11-30 18:21:12

+0

編輯上面的問題以包含Page_Load。 – mhenry 2010-11-30 18:39:19

回答

6

下面的代碼目前有效,但我認爲這對DataBind有點奇怪兩次。這證實了我之前懷疑數據是在FindByValue()之後綁定的?

任何人有關於如何清理此代碼的任何想法?

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     BindDdlAggerationUnitId(); 
    } 
} 

private void BindDdlAggerationUnitId() 
{ 
    ddlAggerationUnitId.DataSource = SIGOpsGUI.App_Code.Business.ExternalAccount.GetAggregationUnits(); 
    ddlAggerationUnitId.DataTextField = "Value"; 
    ddlAggerationUnitId.DataValueField = "Key"; 
    ddlAggerationUnitId.DataBind(); 
} 


public long? Value 
{ 
    get { return Int64.Parse(ddlAggerationUnitId.SelectedItem.Value); } 
    set 
    { 
     BindDdlAggerationUnitId(); 
     ddlAggerationUnitId.SelectedIndex = -1; 
     ListItem item = ddlAggerationUnitId.Items.FindByValue(value.ToString()); 
     if (item != null) 
     { 
      ddlAggerationUnitId.SelectedValue = value.ToString(); 
     } 
    } 
} 
0

看看下面的代碼可以幫助你

更新的Page_Load

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     BindDdlAggerationUnitId(); 
    } 
} 

private void BindDdlAggerationUnitId() 
{ 
    ddlAggerationUnitId.DataSource = ExternalAccount.GetAggregationUnits(); 
    ddlAggerationUnitId.DataTextField = "Value"; 
    ddlAggerationUnitId.DataValueField = "Key"; 
    ddlAggerationUnitId.DataBind(); 
} 



public long? Value 
{ 
    get { return Int64.Parse(ddlAggerationUnitId.SelectedItem.Value); } 
    set 
    { 
     ListItem item = null; 
     if (value.HasValue && ddlAggerationUnitId.Items.Count > 0 && ddlAggerationUnitId.SelectedIndex > 1) 
      item = ddlAggerationUnitId.Items.FindByValue(value.ToString()); 
     if (item != null) 
     { 
      ddlAggerationUnitId.SelectedValue = value.ToString(); 
     } 
    } 
} 
0

只是周圍的工作:

public long? Value 
{ 
get { return Int64.Parse(ddlAggerationUnitId.SelectedItem.Value); } 
set 
{ 
try 
{ 
    if (ddlAggerationUnitId.Items.FindByValue(value.ToString()) != null) 
    { 
     ddlAggerationUnitId.SelectedValue = value.ToString(); 
    } 
} 
catch 
{ 
ddlAggerationUnitId.SelectedIndex = -1; 
} 
} 
} 
0

Pa ge_Load應該是:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     ddlAggerationUnitId.DataSource = ExternalAccount.GetAggregationUnits(); 
     ddlAggerationUnitId.DataTextField = "Value"; 
     ddlAggerationUnitId.DataValueField = "Key"; 
     ddlAggerationUnitId.DataBind(); 
    } 
}