igGridからデータソースを取り出して、CSVに整形して出力する関数を書いてみました。
ブラウザが古いとmap関数で使っている「=>」が使えないかもしれません(IE11ではフィルタ関数を代わりに渡すことで使えました)。
igGridのExcelのサンプルにあるようにFileSaver.jsのsaveAs関数をつかえばダウンロードもできます。
サンプル関数
/**
* igGridの表からデータを取り出し、CSVに整形して文字列として返す
* @param {string} id - igGridを初期化する時に指定したtableタグのid
* @param {string} separator - 各セルの区切り文字。省略可(省略すると,)
* @param {string} newLine - 改行文字。省略可(省略すると\r\n)
*/
function exportGridToCsv(id, separator, newLine) {
if (separator == null) separator = ',';
if (newLine == null) newLine = '\r\n';
// CSV1行目のヘッダ行を取得する
var columns = $('#' + id).igGrid('option', 'columns');
var headerText = columns.map(c => c.headerText)
.join(separator) + newLine;
// CSV2行目以降の本文を取得する
// igGridからデータをオブジェクト配列として取得する
var data = $('#' + id).igGrid('dataSourceObject');
var rowCount = data.length;
var columnKeys = columns.map(c => c.key);
var columnCount = columnKeys.length;
// 各オブジェクト(行データ)を順にテキストに変換する
var bodyText = '';
for (var row = 0; row < rowCount; row++) {
bodyText += columnKeys.map(columnKey => '' + data[row][columnKey])
.join(separator) + newLine;
}
return headerText + bodyText;
}
使い方(tableのidがgridの場合)
区切り文字「,」改行文字「\r\n」でCSVにする場合
exportGridToCsv('grid')
区切り文字「\t」改行文字「\n」でTSVにする場合
exportGridToCsv('grid', "\t", "\n")
グリッドから列定義を取得する
var columns = $('#' + id).igGrid('option', 'columns');
この部分です。
「igGrid API」をキーワードにして検索できる以下のサイトがAPIドキュメントになっています。
https://jp.igniteui.com/help/api/2017.1/ui.iggrid
URLにバージョン番号が入っているので自分が使用しているバージョンと合っているか確認しましょう。
igGridのcolumnsオプションを取得しています。igGridの機能を呼ぶ場合、jQueryのセレクタ.igGrid(“機能名”)のような形を使います。
headerTextやkeyなどのプロパティを持つオブジェクトが取れます。igGrid初期化時に指定した値ですね。
上のサンプル関数では対応していませんが、hiddenの列はCSVには出さない仕様も考えられます。
グリッドから値を取得する
グリッドからデータを抽出するメソッドは以下のようにします。
var data = $('#' + id).igGrid('dataSourceObject');
igGridに指定したデータがオブジェクト配列で取得できます。
また、配列に格納した各オブジェクトのプロパティ名は、上で取得しておいた列定義のkeyの値です。data[3][“ProductName”]と指定すれば4行目のkey=ProductNameのセルの値がとれます。
私のプロジェクトでは、オブジェクト配列としてdataが取れました。データソースに配列を使っていたからかもしれません。
APIドキュメントを見ると、DataSourceはいろいろな拡張があるようです。
ソースの書き方によっては違う形式のデータが取れるかもしれませんので、使う前に開発者ツールなどで確認してください。