GridView選擇性導出Excel解決方案
2024-07-10 12:43:28
供稿:網友
一、需求分析
首先根據用戶需求,可以進行選擇性導出,之前已經做了全部導出,這次新需求又來了,不過仔細想想也對,全部導出幾萬條數據,意義并不大,而可選擇性的導出用戶需要的數據才是用戶需要的。有需求就有解決方法。
任何問題的解決方法都不止一個,GridView的選擇性導出也一樣,首先GridView綁定的是數據庫的表數據,選擇導出,我們也可以從數據中查詢需要的數據,可以直接從前臺GridView表中取得數據,問題來了,怎么判斷選中了,怎么后去選中的那條信息的主鍵(或者獲得整條信息)兩個方向,到底哪個效率哪個更優?
二、解決方法
ONE
1. 前臺獲取選中行的主鍵信息,通過JSON格式,傳送到后臺,后臺解析后,再從數據庫中取得數據,通過DataTable導出到Excel
⑴. 導出所選操作
代碼如下:
<asp:Button ID="Export" runat="server" CssClass="btn-lit" Text="導出所選" OnClientClick="return getnumberExport()" OnClick="Export_Click"/>
⑵. 前臺JS,獲取選中行的那條信息的主鍵,也就是GridView要有一列是主鍵,獲取到所有的主鍵以JSON格式保存,然后傳到服務器
代碼如下:
<script type="text/javascript">
function getnumberExport() {
if (ExportCheck()) {
//通過GridView ID獲取元素
var gv = document.getElementById("ctl00_ContentPlaceHolder1_gridView");
//獲取GridView的Input html
var mycheck = gv.getElementsByTagName("input");
//定義一個新數組
var fam = new Array();
var hg;
var id;
//循環檢測checkbox標簽,獲取每條數據的主鍵信息
for (var i = 0; i < mycheck.length; i++) {
if (mycheck[i].type == 'checkbox')//hidden
{
//如果checkbox被選中
if (mycheck[i].checked == true) {
var numid = new Object();
hg = gv.rows(i + 1).cells(20).innerHTML;
//substring() 方法用于提取字符串中介于兩個指定下標之間的字符。
//LastIndexOf()倒取字符串,從后往前取到指定的字符
hg = hg.substring(hg.lastIndexOf("=") + 1, hg.lastIndexOf("/""));
//獲取一條數據的主鍵
id = gv.rows(i + 1).cells(1).innerHTML;
numid.number = hg;
numid.id = id;
fam.push(numid);
}
}
}
//$.ajaxSetup({
// async: false //設置為同步請求
//});
//將數組轉換成JSON類型
var nid = JSON.stringify(fam);
//post方式,向服務器傳送數據
$.post("List.aspx", { Action: "action", numid: nid}, function (result) {
});
}
else {
return false;
}
}
</script>
⑶. 后臺解析JSON,轉換成DataTable,導出到Excel
代碼如下:
protected void Page_Load(object sender, EventArgs e)
{
//判斷服務器是否正確接收數據
if (Request.Params["Action"] !=null)
{
//獲取前臺的JSON
string numid = Request.Params["numid"].ToString();