У меня есть dropDownList asp.net, который автоматически привязывается к sqlDataSource к значениям типа клиента при загрузке страницы. При загрузке страницы я также создаю объект Client, одно из его свойств - ClientType. Я безуспешно пытаюсь установить SelectedValue ddl в соответствии со значением свойства ClientType объекта Client. Я получаю следующее сообщение об ошибке «System.ArgumentOutOfRangeException: 'ddlClientType' имеет недопустимое значение SelectedValue, поскольку его нет в списке элементов». Я понимаю, что это связано с тем, что список еще не был заполнен, когда я пытаюсь установить выбранное значение. Есть ли способ преодолеть эту проблему? Спасибо!
Установка SelectedValue для DropDownList с привязкой к данным
Ответы (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
Я снова попытался использовать событие dataBound и больше не получаю сообщение об ошибке, но значение не выбрано.
- person Dov Miller; 19.07.2011
Я попробовал ваше второе предложение, прежде чем использовать также 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