Asp.net中滿足條件的複選框自動被選中(二)
阿新 • • 發佈:2019-01-30
被選複選框的靠前顯示
一、其他不多說,直接進入正題:我現在要把前一篇部落格中,被選中的複選框都靠前顯示,就是說要有圖一的效果做成圖二的效果:
二、實現思路
這也是一個難點,困擾了我很久,現在和大家一起分享:
實現思路:UserGroup表與 UserList_UserGroup(where 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
其中groupOrder為1,靠前在前面,顯示在頁面的結果就是備選中的複選框靠前顯示。
程式碼實現:
#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的使用不太熟練,剛開始沒有思路,後來在同事週週幫助下完成了此操作,花的時間比較長;不過,做完之後還是很欣喜的。繼續努力吧,需要學習的東西還很多。