日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

asp.net使用原生控件實現自定義列導出功能的方法_實用技巧

作者:小惡魔P ? 更新時間: 2022-04-04 編程語言

自定義列實現

最近負責開發公司內部使用的人事信息化系統時,有一個需求是這樣的,需要在頁面中可以用戶每次導出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

欄目分類
最近更新