Facing same problem here too...
Property "row/values" is maintaining the state and everything works fine if we re-initializing it after making change into data model. In case of JS Array data model, it's pretty easy...
function resetRowValues() {
obj.setDataProperty("count", myData.length);
var newCount = obj.getDataProperty("count");
var rowValues = [];
for(var i=0; i < newCount; ++i) { rowValues.push(i); }
obj.setRowProperty("values", rowValues);
obj.setSortProperty("index", null);
}
As mentioned, above obj.getDataProperty("count"); is always returning ZERO for table model (we can get actual value only after loading is complete). I could have made a hook to above function with "data loading completed" call back function, but don't know how to do this.
It would be better, If grid can reset this "row/values" property internally when ever datamodel changes...
ALEX PLZ... SUGGEST SOMETHING
Sudhaker Raj
August 10,
Define Grid like following
obj.setDataModel(table);
obj._refresh = obj.refresh;
obj._freshData = true;
obj.refresh = function() {
if(this._freshData) {
var newCount = this.getDataProperty("count");
var rowValues = [];
for(var i=0; i < newCount; ++i) { rowValues.push(i); }
this.setRowProperty("values", rowValues);
this.setSortProperty("index", null);
this._freshData = false;
}
this._refresh();
}
document.write(obj);
When refreshing the data (using table model), you are required to set obj._freshData = true; before obj.setDataModel(table);
function show5() {
var table = new Active.Text.Table;
var url = "http://finance.yahoo.com/d/quotes.csv?s=" +
"MSFT,ORCL,SAP,CA,ERTS" +
"&f=sl1d1t1c1ohgv&e=.csv";
table.setURL(url);
table.request();
obj._freshData = true;
obj.setDataModel(table);
}
Tested... Working fine...
I agree, it's quick and dirty solution... ALEX PLZ SUGGEST
Sudhaker Raj
August 11,
Hi Alex...
I tired to use your widget in my app, but I§ve met some problem... Semms to me that your object.sort method or maybe even whole JavaScript does not sort extended characters in right order (like the Czech Alphabet => A,B,C,Ã,D,Ã... but sorting makes it to be A...Z, and then those extended characters...
More problematc seems to be that is obviously sort badly more things. I use your PHP script to fill JS array, but sorting some of the collums does not work... for example ASC sorting of column with some free cells and some values sorts them with no order... free cels, value, freecells... etc...
What I have to workaround ?
I would appreciate your help because otherways I'll not be able to use your widget even of its grat quality...
Thanx Aleš
Aleš Janèo
August 13,
I'm not sure where to place the patch either. I placed the function right after my i created my xml table and before i called .setXML
table.response = function(xml){
this.setXML(xml);
this.$owner.setRowProperty("value", function(i){return i});
this.$owner.setRowProperty("order", function(i){return i});
this.$owner.setRowProperty("count", this.getCount());
this.$owner.setSortProperty("index", null);
this.$owner.refresh();
}
and i saw no change. i even put an alert msg but this funciton was never called. Any ideas ?
Dan
May 4,
Hi,
Can you pls check the following code. I think some thing is wrong with the sort.
Pls do the follows to reproduce the bug
Steps:
1. Load the page
2. click on Add New Row button few times. This will add a new row to the grid and refreshes it. You will see the row count in the corner box.
Make sure that it is displayed in the grid by scrolling.
3. Repeat the same test. But this time before clicking on the Add New Row button, sort the grid based on some column, say Ticker and check the displayed rows in the grid.
4. It shows only 20 rows. Refresh doesn't actually refreshes the grid
Pls help
Thanks
Kini
-------------------------------------------
<html>
<head>
<title>ActiveWidgets Grid :: Examples</title>
<style> body, html {margin:0px; padding: 0px; overflow: hidden;} </style>
<!-- ActiveWidgets stylesheet and scripts -->
<link href="../../runtime/styles/classic/grid.css" rel="stylesheet" type="text/css" ></link>
<script src="../../runtime/lib/grid.js"></script>
<!-- grid format -->
<style>
.active-controls-grid {height: 300px; width=900px; font: menu;}
.active-column-0 {width: 80px;}
.active-column-1 {width: 200px; background-color: threedlightshadow;}
.active-column-2 {text-align: right;}
.active-column-3 {text-align: right;}
.active-column-4 {text-align: right;}
.active-grid-column {border-right: 1px solid threedshadow;}
.active-grid-row {border-bottom: 1px solid threedlightshadow;}
</style>
<!-- grid data -->
<script>
var myData = [
["MSFT","Microsoft Corporation", "314,571.156", "32,187.000", "55000"],
["ORCL", "Oracle Corporation", "62,615.266", "9,519.000", "40650"],
["SAP", "SAP AG (ADR)", "40,986.328", "8,296.420", "28961"],
["CA", "Computer Associates Inter", "15,606.335", "3,164.000", "16000"],
["ERTS", "Electronic Arts Inc.", "14,490.895", "2,503.727", "4000"],
["SFTBF", "Softbank Corp. (ADR)", "14,485.840", ".000", "6865"],
["VRTS", "Veritas Software Corp.", "14,444.272", "1,578.658", "5647"],
["SYMC", "Symantec Corporation", "9,932.483", "1,482.029", "4300"],
["INFY", "Infosys Technologies Ltd.", "9,763.851", "830.748", "15400"],
["INTU", "Intuit Inc.", "9,702.477", "1,650.743", "6700"],
["ADBE", "Adobe Systems Incorporate", "9,533.050", "1,230.817", "3341"],
["PSFT", "PeopleSoft, Inc.", "8,246.467", "1,941.167", "8180"],
["SEBL", "Siebel Systems, Inc.", "5,434.649", "1,417.952", "5909"],
["BEAS", "BEA Systems, Inc.", "5,111.813", "965.694", "3063"],
["SNPS", "Synopsys, Inc.", "4,482.535", "1,169.786", "4254"],
["CHKP", "Check Point Software Tech", "4,396.853", "424.769", "1203"],
["MERQ", "Mercury Interactive Corp.", "4,325.488", "444.063", "1822"],
["DOX", "Amdocs Limited", "4,288.017", "1,427.088", "9400"],
["CTXS", "Citrix Systems, Inc.", "3,946.485", "554.222", "1670"],
["KNM", "Konami Corporation (ADR)", "3,710.784", ".000", "4313"]
];
var myColumns = [
"Ticker", "Company Name", "Market Cap.", "$ Sales", "Employees"
];
</script>
</head>
<body>
<script>
// create ActiveWidgets Grid javascript object
var obj = new Active.Controls.Grid;
// set number of rows/columns
obj.setRowProperty("count", myData.length);
obj.setColumnProperty("count", 5);
// provide cells and headers text
obj.setDataProperty("text", function(i, j){return myData[i][j]});
obj.setColumnProperty("text", function(i){return myColumns[i]});
obj.getLayoutTemplate().setContent("corner/box/item", "<b>" + myData.length + "</b>");
// set headers width/height
obj.setRowHeaderWidth("28px");
obj.setColumnHeaderHeight("20px");
// write grid html to the page
document.write(obj);
function addRow(){
var rowData = ["MSFT","Microsoft Corporation", "314,571.156", "32,187.000", "55000"];
myData.unshift(rowData);
obj.setRowProperty("count", myData.length);
obj.getLayoutTemplate().setContent("corner/box/item", "<b>" + myData.length + "</b>");
// obj.sort(obj.getSortProperty("index"), obj.getSortProperty("direction"));
obj.refresh();
}
</script>
<input type="button" value="Add New Row" onclick="javascript:addRow()"/>
</body>
</html>
Kini
May 25,