1. 程式人生 > >Asp.net中滿足條件的複選框自動被選中(二)

Asp.net中滿足條件的複選框自動被選中(二)

被選複選框的靠前顯示

一、其他不多說,直接進入正題:我現在要把前一篇部落格中,被選中的複選框都靠前顯示,就是說要有圖一的效果做成圖二的效果:


             

 二、實現思路

  這也是一個難點,困擾了我很久,現在和大家一起分享:

      實現思路: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的使用不太熟練,剛開始沒有思路,後來在同事週週幫助下完成了此操作,花的時間比較長;不過,做完之後還是很欣喜的。繼續努力吧,需要學習的東西還很多。