Asp.net中满足条件的复选框自动被选中(二)

本文介绍如何将ASP.NET中被选中的复选框靠前显示,通过UserGroup表与UserList_UserGroup表进行左连接,增加groupOrder字段并按降序排序来实现。详细讲述了实现思路和数据库测试效果,并展示了代码实现过程。

被选复选框的靠前显示

 

一、其他不多说,直接进入正题:我现在要把前一篇博客中,被选中的复选框都靠前显示,就是说要有图一的效果做成图二的效果:


             

 

 二、实现思路

  这也是一个难点,困扰了我很久,现在和大家一起分享:

      实现思路:UserGroup表与  UserList_UserGroupwhere UuserCode='')所属的分组集合(即复选框备选中的组 进行左连接增加一个字段groupOrder(存在的组为1,不存在的为0)然后按groupOrder排序降序,即可实现靠前显示

其中UserGroup表存的是用户组信息, UserList_UserGroup是用户和用户组关系表。


这是数据库的测试效果:

SELECT 
 
ug.Code,ug.GroupName,ug.GroupMark,ug.ValidStatus,ul_ug.UserGroupCode,ul_ug.UserListCode,(CASEWHEN ISNULL (ul_ug.Code,'0')='0' THEN '0' ELSE '1' END ) AS groupOrder  , ROW_NUMBER() OVER (ORDER BY(CASE WHEN ISNULL (ul_ug.Code,'0')='0' THEN '0'  ELSE '1' END) DESC  ) AS 'RowNumberForSplit'
 
FROM [ManageCenter].[UserGroup] ug  LEFT JOIN(SELECT  * FROM ManageCenter.UserList_UserGroup WHEREUserListCode='d6ab201f-0cf2-8af4-40fb-5f6e7bfd6277')ul_ug  ON ug.Code=ul_ug.UserGroupCode 
 
WHERE 1 = 1  AND 1=1 

 

 

其中groupOrder1,靠前在前面,显示在页面的结果就是备选中的复选框靠前显示。

 

代码实现:

 

 #region DataBinder()方法, Repeater1绑定用户组
        /// <summary>
        /// Repeater1绑定用户组
        /// </summary>
        protected  List<string> strRoleCodeList = newList<string>();
        public void DataBinder()
        {
 
            //从用户列表中传过来要分组的用户
            string[] userCodes =Request.QueryString["userCode"].ToString().Split(',');
            //查询单个用户的多分组集合code  
            if (userCodes.Length == 1) {
               Data.UserList_UserGroupCollection UL_UserGroup =Data.UserList_UserGroupAdapter.Instance.LoadUserList_UserGroupCollByUserCode(userCodes[0]);
                foreach (var p in UL_UserGroup)
                {
                   strRoleCodeList.Add(p.UserGroupCode);
                }
            }
           
            //绑定所有用户组列表
            int startRowIndex = (curPageIndex -1) * AspNetPager1.PageSize;
            int RecordCount = 0;          
                strSqlWhere ="1=1 ";
                QueryCondition qc = newQueryCondition();
                qc.FromClause= " [ManageCenter].[UserGroup] ug  LEFT JOIN (SELECT  * FROM  ManageCenter.UserList_UserGroupWHERE UserListCode='" + userCodes[0] + "')ul_ug  ON ug.Code=ul_ug.UserGroupCode  ";
               qc.OrderByClause = "(CASE WHEN ISNULL (ul_ug.Code,'0')='0' THEN '0'  ELSE '1' END ) DESC  ";
 
               qc.SelectFields = "ug.Code,ug.GroupName,ug.GroupMark,ug.ValidStatus,ul_ug.UserGroupCode,ul_ug.UserListCode,(CASEWHEN ISNULL (ul_ug.Code,'0')='0' THEN '0' ELSE '1' END ) AS groupOrder  ";
                qc.WhereClause = strSqlWhere;
                DataSet ds = new DataSet();
                ds =CommData.commdata.GetDataPageList(startRowIndex, AspNetPager1.PageSize, refRecordCount, qc);
                AspNetPager1.RecordCount =RecordCount;
                Repeater1.DataSource = ds;
                Repeater1.DataBind();
              
            }
        #endregion
        #region CheckBoxStatus(string code) 方法; 前台绑定此方法,检查哪些复选框处于被选中的状态
        protected string CheckBoxStatus(stringcode)
        {
            if (strRoleCodeList.Contains(code))
            { return"checked='checked'"; }
            else
            { return ""; }
 
        }
        #endregion
 
/// <summary>
///包装分页查询的查询参数
///</summary>
[Serializable]
publicclass QueryCondition
{
privatestring selectFields = string.Empty;
privatestring fromClause = string.Empty;
privatestring whereClause = string.Empty;
privatestring orderByClause = string.Empty;
privatestring groupByClause = string.Empty;
privateint rowIndex = 0;
privateint pageSize = 10;
 
privatestring primaryKey = string.Empty;
 
///<summary>
///构造方法
///</summary>
publicQueryCondition()
{
}
 
///<summary>
///构造方法
///</summary>
///<param name="rowIndex">从第几行开始</param>
///<param name="pageSize">每页的行数</param>
///<param name="select">sql语句返回的字段</param>
///<param name="from">sql语句的from部分</param>
///<param name="orderBy">sql语句的orderBy部分</param>
publicQueryCondition(int rowIndex, int pageSize, string select, string from, stringorderBy)
{
this.rowIndex= rowIndex;
this.pageSize= pageSize;
this.selectFields= select;
this.fromClause= from;
this.orderByClause= orderBy;
}
 
}

说明:他们底层已经封装好了,通过QueryCondition实体,传递把所需要的sql部分传给去,然后拼接成我们的SQL语句的执行。截获的sql语句同上测试。

 

三、做这块的时候,由于对sql的使用不太熟练,刚开始没有思路,后来在同事周周帮助下完成了此操作,花的时间比较长;不过,做完之后还是很欣喜的。继续努力吧,需要学习的东西还很多。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值