关于某些列表控件返回空值的边界问题处理方法

最近做的东西很郁闷,当初新手的时候,没有对某些列表控件例如: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全部加一遍这个事件...我还是老老实实做人算了..
posted @ 2008-04-07 11:50  gxpotato  阅读(304)  评论(0)    收藏  举报