关于某些列表控件返回空值的边界问题处理方法
最近做的东西很郁闷,当初新手的时候,没有对某些列表控件例如:DropDownList/ListBox/CheckBoxList等这些列表控件进行边界处理.测试的时候,都是有数据的,后来系统初始化,清理所有测试数据交给客户用的时候,就出现了空的DataSet绑定这些控件,而出现空值出错的问题...由于做的东西很多..方法都十几个,,如果一个一个修改的话..累死..还要重新测试一遍..翻阅了MSDN之后,发现了一个方法..老鸟肯定知道的..像我这样的菜鸟就需要了..
这些控件有个.Net 2.0之后添加的属性: AppendDataBoundItems 表示绑定的数据都在预设列表值之后追加.也就是说,我们设定一个默认值,避免出现因为DataSet空值绑定,返回空值而出现的边界问题.
<asp:DropDownList ID="teamList" runat="server" DataTextField="schtms_name" DataValueField="schtms_id" OnSelectedIndexChanged="teamList_SelectedIndexChanged" AutoPostBack="True" AppendDataBoundItems="true">
<asp:ListItem Value="-1">暂无团队</asp:ListItem>
</asp:DropDownList>
红色部分就是最加的内容.其他的控件同上.这样一来,绑定的数据都在"<asp:ListItem Value="-1">暂无团队</asp:ListItem>"后面,也就是说有个初始化的默认值,就不会因为返回空值而出错了.
我本以为这个问题就这样OK了.可是事情并不是照我想象的那样...因为我在测试的过程中发现了一件很奇怪的事情,就是这个属性会让数据重复绑定.出现重复的数值......这个时候我才明白,这个"AppendDataBoundItems",实际上就是一个绑定前,清不清空item数据的选项.
俗话说:1计不成,再生1计.我想了一下..绑定数据的时候,会自动清空DropDownList里面的items.肯定不能在绑定之前加这个默认选项了....整理了一下思路,方法有2:
1 绑定前给dataset添加一条数据.....这个方法太烂...因为要new一个row.
2 在DropDownList 绑定数据之后,insert一个默认选项出来.可以利用DropDownList的DataBound事件,这个事件是绑定之后处理的.
protected void DropDownList1_DataBound(object sender, EventArgs e)
{
ListItem newLI = new ListItem("select all", "-1");
DropDownList1.Items.Insert(0, newLI);
}
这下..终于搞定这个默认值了,看样子这个"AppendDataBoundItems"不是那么好用的...虽然解决了默认值的问题..我发现..我还是要把项目中做过的DropDownList全部加一遍这个事件...我还是老老实实做人算了..

浙公网安备 33010602011771号