1. item.Selected = true;有时不起作用
例如当你先选中第三项之前的任何一项,然后执行下面代码是可以实现第三项被选中的,而当你选中第三项之后的任何一项的时候,你再去执行如下代码,你将看到没任何变化,也就是第三项没被选中,这也许是Microsoft VS的一个bug.
ListItem item= this.RadioButtonList1.Items.FindByValue("第三项value");
item.Selected = true;
2. 对于习惯使用.SelectedItem.Selected = false;的人要小心了。
SelectedItem.Selected = false; 注意考虑当前没有任何选中的情况,
比如RadioButton,CheckBox类型可能当前就没选中的,那样SelectedItem.Selected = false就未将对象应用
到对象的是实例,如果是DropDownList类型的也许可以,毕竟它默认肯定有一项被选中,所以不会出错。
3. 在AJAX里面Selected Bind的时候也要小心
因为AJAX是部分刷新,所以假如说你第一项现在是选中的,现在你用某中方法去选中第二项,那么如果你没把SelectedIndex = -1,那么这时候你第一项第二项都将被选中。
4. **list.SelectedValue = value;也可以执行selected, SelectedIndex =数值,也是可以设置被选中的。
当然你可以用循环的方式比较值或text来执行是否选中。
总结一个通用的方法,下面这个方法,无论你的数据结构怎么变化,无论你的list是固定的还是绑定的,无论是否使用ajax等等情况都不会产生任何问题,也不需要去修改任何代码。如下:
ListItem item = this.**List.Items.FindByValue("YourValue") //FindByText("") is ok.
this.**List.SelectedIndex = -1;
if (item != null)
{
item.Selected = true;
}
之前我是小看了这个简单的Bind,后来发现里面的学问相当大,上面这个代码很简单吧,而且任何情况都不会问题,当然对于那些很简单而且也不会变化的**list来讲,这个有点复杂了。