我在包含名为ddlAggerationUnitId的DropDownList的自定义用户控件中具有以下代码。 DropDownList是在Page_Load()事件上进行数据绑定(bind)的。 “值”设置为40,并且确实存在。如果我删除set方法的逻辑,则该页面将加载并选择正确的项目,但是如果该值是伪造的,则该页面将引发异常。我想通过在尝试设置值之前查看该值是否存在来避免该异常,因此为什么需要逻辑。

现在看来,编译器正在将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();
}

最佳答案

以下代码当前有效,但是我认为它对DataBind来说有点奇怪。这证实了我先前的怀疑,即FindByValue()之后是否绑定(bind)了数据?

有人对如何清理此代码有任何想法吗?

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();
        }
    }
}

关于c# - ASP.NET DropDownList上的FindByValue,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4316998/

10-13 05:00