網站首頁 編程語言 正文
自定義列實現
最近負責開發公司內部使用的人事信息化系統時,有一個需求是這樣的,需要在頁面中可以用戶每次導出Excel時自定義需要導出哪些列,經過半天的琢磨和倒騰,總算完成了這個需求。寫篇blog記錄一下小菜雞的成長歷程。哈哈哈。
需求見截圖所示:
tbg:數據源使用DataTable、且GridView中用于綁定數據的BoundFiled列中使用的DataField全部是與CheckBox中的ID一一對應,這樣方便后面循環這些控件時進行操作。
嘗試一
- 數據源使用的是DataTable一開始想的是根據CheckBox的選中決定刪除Remove掉DataTable中的列,因為每次查詢時,DataTable中的數據會重新被填充,但在實施過程中發現,如果DataTable中的對應列移除掉,但是GridView中的列乜有移除的話,也會報錯,想過也去移除對應的GridView中的BoundFiled,但是在移除后又去添加與CheckBox的ID相對應的列,如此操作非常容易出錯,而且整個for循環寫的非常惡心,一層套一層。而且在移除對應的DataTable列和GridView中的列之后會無法再進行有效的添加(前端不顯示),猜測可能是回發問題導致的,沒有有效解決遂放棄。
嘗試二
- 使用一個字典Dictionary存儲CheckBox的ID和對應的選中狀態,然后去遍歷GridView中的每一列,為每一列設置對應的隱藏和顯示狀態。這個方案嘗試成功了哈,哈哈哈,雖然很簡單,但開心了好一陣子。下面放代碼;
DataTable dt = employeesServices.GetEmployeesDataTable(); Dictionary<string, bool> ckbInfoList = new Dictionary<string, bool>(); foreach (var control in Page.Controls) { if (control.GetType().ToString() == "System.Web.UI.HtmlControls.HtmlForm") { HtmlForm form = (HtmlForm)control; foreach (var item in form.Controls) { if (item is CheckBox) { CheckBox ckb = (CheckBox)item; if (!ckb.Checked) { ckbInfoList.Add(ckb.ID, false); } else { ckbInfoList.Add(ckb.ID,true); } } } } } //遍歷GridView列,根據Dictionary提供的內容來決定是否隱藏。 foreach (var control in Page.Controls) { if (control.GetType().ToString() == "System.Web.UI.HtmlControls.HtmlForm") { HtmlForm form = (HtmlForm)control; foreach (var item in form.Controls) { if (item.GetType().ToString() == "System.Web.UI.WebControls.GridView") { GridView gridView = (GridView)item; foreach (BoundField col in gridView.Columns) { foreach (var keyValue in ckbInfoList) { if (keyValue.Key == col.DataField) { col.Visible = Convert.ToBoolean(keyValue.Value); } } } } } } } gv.DataSource = dt; gv.DataBind();
總結
原文鏈接:https://www.cnblogs.com/-NETer-P/p/15791594.html
相關推薦
- 2022-04-05 Python+Opencv答題卡識別用例詳解_python
- 2023-01-12 C語言中數組排序淺析_C 語言
- 2022-08-18 Android顏色處理SweepGradient掃描及梯度渲染示例_Android
- 2022-12-21 Python中Turtle庫改變畫筆(海龜)方向的兩種方法總結_python
- 2022-10-14 wget -c 斷點續傳命令
- 2022-03-27 .NET?Core利用動態代理實現AOP(面向切面編程)_實用技巧
- 2022-05-25 @NoArgsConstructor、@AllArgsConstructor、@RequiredAr
- 2022-08-04 Django框架之路由用法_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支