FindByValue в ASP.NET DropDownList - PullRequest
       19

FindByValue в ASP.NET DropDownList

4 голосов
/ 30 ноября 2010

У меня есть следующий код в пользовательском элементе управления, который содержит DropDownList с именем ddlAggerationUnitId. DropDownList - это DataBind'd для события Page_Load (). «Значение» установлено равным 40, и оно существует. Если я уберу логику для заданного метода, страница загрузится и выберет правильный элемент, но если значение является поддельным, страница выдаст исключение. Я хотел бы избежать этого исключения, посмотрев, существует ли значение ДО того, как пытаться его установить, поэтому и необходима логика.

Сейчас похоже, что компилятор оценивает оператор if как ложный, хотя я точно знаю, что это должно быть правдой.

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

Ответы [ 4 ]

6 голосов
/ 30 ноября 2010

Следующий код в настоящее время работает, однако я думаю, что это несколько странно для 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();
        }
    }
}
1 голос
/ 30 ноября 2010

посмотрите, поможет ли вам следующий код

updated 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 голосов
/ 30 ноября 2010

Page_Load должно быть:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
       ddlAggerationUnitId.DataSource = ExternalAccount.GetAggregationUnits();
       ddlAggerationUnitId.DataTextField = "Value";
       ddlAggerationUnitId.DataValueField = "Key";
       ddlAggerationUnitId.DataBind();
    }
}
0 голосов
/ 30 ноября 2010

Просто обойти:

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;
 }
}
}
...