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;
        }

 

一点积累,一点收获。

posted @ 2012-12-03 17:04  蓝天_野菜  阅读(2048)  评论(0)    收藏  举报