2010-11-30 90 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(); 
    } 
}