我有一个asp.net dropDownList,它自动绑定到sqlDataSource到页面加载时客户端类型的值。在页面加载时,我也在创建一个Client对象,其中一个属性是ClientType。我试图根据Client对象的ClientType属性的值设置ddl的SelectedValue失败。我收到以下错误消息“System.ArgumentOutOfRangeException:'ddlClientType'具有一个无效的SelectedValue,因为它不存在于项列表中”。我知道这是因为当我尝试设置所选值时,列表尚未填充。有没有办法克服这个问题?谢谢!
答案 0 :(得分:5)
您必须使用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";
}
答案 1 :(得分:4)
在设置选定值之前,请检查项目是否在列表中,而不是按索引选择
<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;
}
}
编辑:已添加......
如果你在页面加载中进行绑定,请尝试按照这种方式:
DataBind()
方法if (!IsPostBack)
{
Page.DataBind(); // only for pages
}