Установка SelectedValue для DropDownList с привязкой к данным

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


person Dov Miller    schedule 19.07.2011    source источник


Ответы (2)


Вы должны использовать событие 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";
}
person Muhammad Akhtar    schedule 19.07.2011
comment
Я снова попытался использовать событие dataBound и больше не получаю сообщение об ошибке, но значение не выбрано. - person Dov Miller; 19.07.2011
comment
Я попробовал ваше второе предложение, прежде чем использовать также ddl.DataSourceID = и это не сработало. Я попробовал еще раз без DataSourceID. У меня были другие проблемы, такие как завершающие пробелы в данных, и после обрезки все, наконец, сработало. Спасибо. - person Dov Miller; 19.07.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;
    }
}

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

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

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