DropDownList绑定时去除重复项
最近在做一个心理健康网络信息平台,感觉有些收获,就记录下来了。
项目需求:
网上预约心理咨师,心理咨询师的可预约时段每星期可能有至多三个时段;
用户只能预约一个时段;
心理咨询师的可预约时段数据结构如下:
图1(可预约事件段表)
本来想,一共就60条不到的数据,就不建立星期数的外键了,省心。
但是做到后面发现各种BUG(UI参考图2),首先预约时有选项:预约日期(也就是星期数),预约时间段,所以就出现了这样的问题:在一般情况下,选择了老师(StaffNum),在预约日期的DropDownList里用一般的方式绑定,对应的可预约星期数会重复出现。

图二(预约表单)
于是就得处理预约日期DropDownList2中的重复项。
解决思路:
先把把所有的数据绑定到DropDownList3,在从DropDownList3中ReMove掉重复的项。
说明:
DropDownList2 表示咨询老师
DropDownList3 表示预约日期
代码如下:
public void Bind() { //赴约时间 string IN_Do_date; string StaffNum = DropDownList2.SelectedItem.Value; //获取当前星期数 string Now_Week = DateTime.Now.Date.DayOfWeek.ToString(); DataSet ds = new DataSet(); ds = tr_B.GetList("StaffNum='" + StaffNum + "'"); //一个用于比较,一个用于绑定 ListItem[] li_arry = new ListItem[ds.Tables[0].Rows.Count]; ListItem[] li_arry_F = new ListItem[ds.Tables[0].Rows.Count]; //绑定时星期(经过对比处理) for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { DataRow dr = ds.Tables[0].Rows[i]; ListItem li = new ListItem(SetWeek(dr["WeekTime"].ToString(), out IN_Do_date, Now_Week), dr["ID"].ToString()); li_arry[i] = li; li_arry_F[i] = li; }
//比较并删除多余项 for (int j = 0; j < li_arry.Length; j++) DropDownList3.Items.Add(li_arry[j]); //先绑定 for (int j = 0; j < li_arry.Length; j++) { for (int k = li_arry.Length - 1; k > j; k--) { if (li_arry[j].Text == li_arry_F[k].Text) { //再删除重复项 DropDownList3.Items.Remove(li_arry[k]); } } } }
最终页面上显示的结果如图三:

图三(最终达标表单)
由于限制只能预约将来七天的时段所以要求前台显示:日期+本周或下周+星期数,所以就自己写了个方法来处理。
其中SetWeek(string Res_Week, out string IN_Do_date, string Now_Week)实现如下:
/// <summary> /// 判断一周内的日期关系并输出 /// </summary> /// <param name="Res_Week">可预约的星期</param> /// <param name="Now_Week">今日的星期</param> /// <returns>最终预定的星期数</returns> public string SetWeek(string Res_Week, out string IN_Do_date, string Now_Week) { string[] Chinese_week = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" }; string[] Englishi_week = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }; string Now_Month = ""; string Do_Date = ""; int i, j; for (i = 0; i < Chinese_week.Length; i++) { if (Chinese_week[i] == Res_Week) { break; } } for (j = 0; j < Englishi_week.Length; j++) { if (Englishi_week[j] == Now_Week) { if (i > j) { Now_Month = DateTime.Now.Date.AddDays(i - j).ToString().Substring(0, 10); Do_Date = Now_Month + "本周" + Chinese_week[i]; } else if (i < j) { Now_Month = DateTime.Now.Date.AddDays(7 - j + i).ToString().Substring(0, 10); Do_Date = Now_Month + "下周" + Chinese_week[i]; } else { Now_Month = DateTime.Now.Date.AddDays(7).ToString().Substring(0, 10); Do_Date = Now_Month + "下周" + Chinese_week[i]; } break; } } IN_Do_date = Now_Month; return Do_Date; }
一点积累,一点收获。

浙公网安备 33010602011771号