您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“asp.net怎么使用原生控件實(shí)現(xiàn)自定義列導(dǎo)出功能”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“asp.net怎么使用原生控件實(shí)現(xiàn)自定義列導(dǎo)出功能”吧!
最近負(fù)責(zé)開發(fā)公司內(nèi)部使用的人事信息化系統(tǒng)時(shí),有一個(gè)需求是這樣的,需要在頁面中可以用戶每次導(dǎo)出Excel時(shí)自定義需要導(dǎo)出哪些列,經(jīng)過半天的琢磨和倒騰,總算完成了這個(gè)需求。寫篇blog記錄一下小菜雞的成長歷程。哈哈哈。
需求見截圖所示:
tbg:數(shù)據(jù)源使用DataTable、且GridView中用于綁定數(shù)據(jù)的BoundFiled列中使用的DataField全部是與CheckBox中的ID一一對(duì)應(yīng),這樣方便后面循環(huán)這些控件時(shí)進(jìn)行操作。
數(shù)據(jù)源使用的是DataTable一開始想的是根據(jù)CheckBox的選中決定刪除Remove掉DataTable中的列,因?yàn)槊看尾樵儠r(shí),DataTable中的數(shù)據(jù)會(huì)重新被填充,但在實(shí)施過程中發(fā)現(xiàn),如果DataTable中的對(duì)應(yīng)列移除掉,但是GridView中的列乜有移除的話,也會(huì)報(bào)錯(cuò),想過也去移除對(duì)應(yīng)的GridView中的BoundFiled,但是在移除后又去添加與CheckBox的ID相對(duì)應(yīng)的列,如此操作非常容易出錯(cuò),而且整個(gè)for循環(huán)寫的非常惡心,一層套一層。而且在移除對(duì)應(yīng)的DataTable列和GridView中的列之后會(huì)無法再進(jìn)行有效的添加(前端不顯示),猜測(cè)可能是回發(fā)問題導(dǎo)致的,沒有有效解決遂放棄。
使用一個(gè)字典Dictionary存儲(chǔ)CheckBox的ID和對(duì)應(yīng)的選中狀態(tài),然后去遍歷GridView中的每一列,為每一列設(shè)置對(duì)應(yīng)的隱藏和顯示狀態(tài)。這個(gè)方案嘗試成功了哈,哈哈哈,雖然很簡(jiǎn)單,但開心了好一陣子。下面放代碼;
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列,根據(jù)Dictionary提供的內(nèi)容來決定是否隱藏。 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();
到此,相信大家對(duì)“asp.net怎么使用原生控件實(shí)現(xiàn)自定義列導(dǎo)出功能”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。