さまざまなデータセットのクエリの結果を表示するグリッド (Dojo 1.8、dgrid) を TabContainer に入力しています。各タブは、1 つのデータセットの結果です。異なるデータセットにはさまざまな数のフィールドがあるため、各グリッドを動的に構築し、TabContainer に追加される ContentPane に追加します。
私の現在の問題は、グリッドを作成するときにグリッドの幅を設定することです。データセットには、グリッドに表示される 2 つのフィールドから 100 を超えるフィールドを含めることができます。CSS で 600px のグリッドのデフォルト幅を設定しましたが、グリッドにはデータセットの最初の 6 つのフィールドしか表示されません。幅を「自動」に設定すると、TabContainer と同じ幅しかなく、スクロール バーが削除され、データが切り取られます。各グリッドの幅を個別に設定することはできますか?
これは、結果がどのように見えるかです
これは、TabContainer を設定するためのコードです。
function buildColumns(feature) {
var attributes = feature.attributes;
var columns = [];
for (attribute in attributes) {
if (attribute != "Shape") {
var objects = {};
objects.label = attribute;
objects.field = attribute;
columns.push(objects);
}
}
return columns;
}
function populateTC(results, evt) {
try {
if (dijit.byId('tabs').hasChildren) {
dijit.byId('tabs').destroyDescendants();
}
if (results.length == 0) {
console.log('Nothing found.');
return;
}
var combineResults = {};
for (var i = 0, len = results.length; i < len; i++) {
var result = results[i];
var feature = result.feature;
var lyrName = result.layerName.replace(' ', '');
if (combineResults.hasOwnProperty(lyrName)) {
combineResults[lyrName].push(result);
}
else {
combineResults[lyrName] = [result];
}
}
for (result in combineResults) {
var columns = buildColumns(combineResults[result][0].feature);
var features = [];
for (i = 0, len = combineResults[result].length; i < len; i++) {
features.push(combineResults[result][i].feature);
}
var data = array.map(features, function (feature) {
return lang.clone(feature.attributes);
});
var dataGrid = new (declare([Grid, Selection]))({
id: "dgrid_" + combineResults[result][0].layerId,
bufferRows: Infinity,
columns: columns,
"class": "resultsGrid"
});
dataGrid.renderArray(data);
dataGrid.resize();
dataGrid.on(".dgrid-row:click", gridSelect);
var cp = new ContentPane({
id: result,
content: "<b>" + combineResults[result][0].layerName + "\b",
//content: dataGrid,
title: combineResults[result][0].layerId
}).placeAt(dijit.byId('tabs'));
cp.addChild(dataGrid);
cp.startup();
cp.resize();
}
tc.startup();
tc.resize();
map.infoWindow.show(evt.screenPoint, map.getInfoWindowAnchor(evt.screenPoint));
}
catch (e) { console.log(e.message); }
}