Установка SelectedValue привязки данных DropDownList - PullRequest
5 голосов
/ 19 июля 2011

У меня есть asp.net dropDownList, который автоматически привязывается к sqlDataSource значениям типа клиента при загрузке страницы. При загрузке страницы я также создаю объект Client, одним из его свойств является ClientType. Я пытаюсь установить SelectedValue ddl в соответствии со значением свойства ClientType объекта Client безуспешно. Я получаю следующее сообщение об ошибке «System.ArgumentOutOfRangeException:« ddlClientType »имеет значение SelectedValue, которое недопустимо, поскольку его нет в списке элементов». Я понимаю, что это потому, что список еще не был заполнен, когда я пытаюсь установить выбранное значение. Есть ли способ преодоления этой проблемы? Спасибо!

Ответы [ 2 ]

5 голосов
/ 19 июля 2011

Вы должны использовать событие DataBound, оно будет запущено после завершения привязки данных

protected void DropDownList1_DataBound(object sender, EventArgs e)
{
    // You need to set the Selected value here...
}

Если вы действительно хотите увидеть значение в событии загрузки страницы, то перед установкой значения вызовите метод DataBind() ...

protected void Page_Load(object sender, EventArgs e)
{
    DropdownList1.DataBind();
    DropdownList1.SelectedValue = "Value";
}
4 голосов
/ 19 июля 2011

Перед установкой выбранного значения проверьте, есть ли элемент в списке, а затем выберите его по индексу

<asp:DropDownList id="dropDownList"
                    AutoPostBack="True"
                    OnDataBound="OnListDataBound"
                    runat="server />
protected void OnListDataBound(object sender, EventArgs e) 
{
    int itemIndex = dropDownList.Items.IndexOf(itemToSelect);
    if (itemIndex >= 0)
    {
      dropDownList.SelectedItemIndex = itemIndex;
    }
}

РЕДАКТИРОВАТЬ: Добавлено ...

Если вы выполняете связывание в Page Load, попробуйте выполнить следующие действия:

  • Переместить весь связанный с привязкой код в переопределенный DataBind() метод
  • В Page_Load из Page добавить: (в случае контроля не вызывайте DataBind напрямую, это ответственность родительской страницы)
if (!IsPostBack)
{
   Page.DataBind(); // only for pages
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...