私は文字列を持っています
var str = 'Supplier Name^supplier^left^string*Spend (USD MM)^spend^right^number^5';
上記の文字列からデータフィールド名を取得し、次のように配列に格納する関数をjavascriptで記述します。
function getColNamesfromConfig(str) {
var cols = new Array();
for (i = 0; i <= str.split('*').length - 1; i++) {
cols[i] = str.split('*')[i].split('^')[1];
//Will write logic to retrieve the Supplier Name, Spend (USD MM) fields etc
}
return cols;
}
私が得る結果は次のとおりです:cols[0]=サプライヤー; cols[1]=支出; など..(データフィールド)
次に、動的テーブルを作成し、次のように取得した上記の情報を使用します。
"onResultHttpService": function (result, properties) {
var json_str = Sys.Serialization.JavaScriptSerializer.deserialize(result);
var colNames = getColNamesfromConfig(properties.PodAttributes.DGConfig);
var htmlMarkup = '';
htmlMarkup = "";
htmlMarkup = htmlMarkup + "<table width='100%' border='1' cellspacing='0' cellpadding='0' class='gridView gridMouseOverEffect'>";
htmlMarkup = htmlMarkup + "<tr>";
for (var c = 0, colLen = colNames.length; c < colLen; c++) {
//COLUMN LOOP (here i want to bind 'Supplier Name' and not 'supplier' which is what i get from getColNamesfromConfig(str);
htmlMarkup = htmlMarkup + "<th align='left' class='secondaryLink tableContentRow'> <h5>" + colNames[c] + "</h5>";
htmlMarkup = htmlMarkup + "</th>";
}
htmlMarkup = htmlMarkup + "</tr>";
for (var i = 0, rowlen = json_str.length; i < rowlen; i++) {
htmlMarkup = htmlMarkup + " <tr>"
for (var c = 0, colLen = colNames.length; c < colLen; c++) {
htmlMarkup = htmlMarkup + " <td align='left' class='secondaryLink tableContentRow'> " + json_str[i][colNames[c]];
htmlMarkup = htmlMarkup + "</td>"
}
htmlMarkup = htmlMarkup + "</tr>"
}
htmlMarkup = htmlMarkup + "</table>"
divPortletId = '#' + properties.id;
$(htmlMarkup).appendTo($(divPortletId));
}
サンプル文字列から表示名も取得する必要がある場合、同じ配列に格納してアクセスするにはどうすればよいですか?例:ループして表示名(サプライヤー名)とデータフィールド名(サプライヤー)を取得できるものが必要です。現在列データフィールドをバインドしているCOLUMNLOOPの表示名をバインドしたいだけです。したがって、getColNamesfromConfig(str)関数を微調整して、データフィールドと、配列またはオブジェクトリテラルの表示名の両方を返すようにしてください。次のようなものが必要です。
cols[0].DisplayName = "Supplier Name";
cols[0].DatafieldName = "supplier";
cols[1].DisplayName = "Spend (USD MM)";
cols[1].DatafieldName = "spend";