3.2.0

Bug Caused by sorting?

Hi Alex,

Here is an issue I came up against. I would like to know if there is a work around; definately seems like a bug to me

I have a Grid which has the Active.XML.Table for table model. Initially the Grid loads fine. Now I sort on some column (any column). Following this I reload the Grid/Table except this time I am loading fewer rows in the Grid. The Grid maintains the number of rows from the previous result (with some blank rows). Seems to me that some datastructure is retaining values as a result of the sort previously performed since the grid reloads fine with fewer rows when I do not sort

STEPS:

(1) Grid has 5 rows
(2) Sort on any column
(3) Reload Grid (Now xml table has 3 actual rows) Grid displays 3 rows + 2 blank rows
(4) The 2 blank rows are an issue.


Thanks
Bhaskar
August 10,
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() {	
  //  re-initialize the data count
  obj.setDataProperty("count", myData.length);
  // @@@ I GET THIS ZERO FOR TABLE MODEL
  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,
Part B for the same bug

(1) Grid has 3 rows
(2) Sort on any column
(3) Reload Grid (Now xml table has 4 actual rows) Grid displays 3 rows; 4 th row is never displayed
(4) The 2 blank rows are an issue.


I think this is a related issue.

Thanks
Bhaskar
August 11,
Hi,

Does anyone have a solution/work-around to this issue? Any suggestion on where to look in the grid in case I want to fix this will be appreciated. Right now this is a blocking issue in the app that I have used the grid; so any help is greatly appreciated.

Thanks
Bhaskar
August 11,

In example data - yahoo quotes (IE only).htm, I tried

table.setProperty("async", false);


Grid is waiting for ever :-? Any clue... Is there any way to send request synchronously...

Sudhaker Raj
August 11,
Define Grid like following

//  provide external model as a grid data source
  obj.setDataModel(table);

  // patch the refresh method
  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;
      // alert('Count: ' + newCount);
    }
    this._refresh();
  }
  // write grid html to the page
  document.write(obj);


When refreshing the data (using table model), you are required to set obj._freshData = true; before obj.setDataModel(table);

function show5() {  
    //  create ActiveWidgets data model - text-based table
    var table = new Active.Text.Table;
    //  Yahoo provides 15min delayed stock quotes in CSV format
    var url = "http://finance.yahoo.com/d/quotes.csv?s=" +
          "MSFT,ORCL,SAP,CA,ERTS" +
          "&f=sl1d1t1c1ohgv&e=.csv";
    //  set data URL
    table.setURL(url);
    //  start asyncronous data retrieval
    table.request();
    //  provide external model as a grid data source
    obj._freshData = true; // @@@ important @@@
    obj.setDataModel(table);

  }


Tested... Working fine...

I agree, it's quick and dirty solution... ALEX PLZ SUGGEST

Sudhaker Raj
August 11,

I was waiting for someone to provide solution to it ;-) and I disabled the sorting as a work around. But it is working like dream with this patch...

Check http://thej2ee.com/awdemo/examples/myexamples/refresh_data_yahoo_quotes.htm

You need to download the file in to example\grid folder. Accessing directly from my site will result 'Permission denied' because I am not yahoo... (domain should match for ActiveX component to work)
Sudhaker Raj
August 11,
Guys, sorry for this bug - here is a workaround (for XML model)

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();
}
Alex (ActiveWidgets)
August 12,

There should be similar patch for javascript array data source...

PLZ SUGGEST ASAP.

Then I will not have to re-initialize "row/values" every time... I could figure out only "row/values" and "sort/index"... there were 2 more to reset...

My work-around for JS Array (not working right all the time...)

function resetRowValues() {     
  //  re-initialize the data count 
  obj.setDataProperty("count", myData.length); 
  // @@@ I GET THIS ZERO FOR TABLE MODEL 
  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); 
}

Sudhaker Raj
August 13,
Tested the code. Following line is giving pronlem... Object doen't support.....

this.setXML(xml);


Has anyone tested the code suggested by Alex?
Sudhaker Raj
August 13,
Have'nt tried it yet but I do not see why you should be getting this error. I have some code that does setXML without a problem. However will let you know as soon as I try this.


Thanks
Bhaskar
August 13,
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 tried it with sample grid 'data - yahoo quotes (IE only).htm' and got this error. Guess, CSV and XML are handled differently...
Sudhaker Raj
August 13,
Thanks Alex,

Sudhaker, works like a charm for me. However I am getting a similar error on Mozilla Firefox. The grid load fine the first time and thereafter I get the same error as you mention. I have not investigated the issue further and will let you know when I get there.

Thanks
Bhaskar
August 13,
Here is the patch which should fix both CSV and XML:

Active.HTTP.Request.prototype.response = function(data){
    if (this.$owner) {
        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();
    }
}
Alex (ActiveWidgets)
August 16,
I'll vote for -1 not null
// this.$owner.setSortProperty("index", null); 
this.$owner.setSortProperty("index", -1);
Sudhaker Raj
September 23,
(...)
XYZ
September 24,
Inside 'grid.js'
obj.defineSortProperty("index", -1);
obj.defineSortProperty("direction", "none");


So it make more sense to reset it to default values, else code comparing ‘sort/index’ to -1 will fail…

// this.$owner.setSortProperty("index", null); 
this.$owner.setSortProperty("index", -1); 
this.$owner.setSortProperty("direction", "none");


My faceless coward desi friend, stop pulling legs of others. Somebody may not be taking rubbish just because you couldn’t understand it...
Sudhaker Raj
September 24,
Hi guys,

I'm sorry, but I don't understand where I must write this patch.

Thank you.
Andrea
Andrea
March 25,
Are we talking about the same problem?
http://www.activewidgets.com/javascript.forum.3806.2/serious-sorting-bug-but-should.html

Any column being sorted with an empty field will not sort correctly.
Dyme
March 25,
I tried both patches from Alex, my table refreshes fine, except for the fact that if i sort by a column, then refresh the sorted column is no longer sorted, and work around for this?
David D.
April 25,
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,
I'm a bit lost. Looks like this thread is about the same problem that I stumbled into using JS Array (javascript.forum.4849.0/grid-cleanup-between-data-loads.html).
Looks like 1.0.1 doesn't fix it. Is there any "official" workarounds except for one suggested by Sudhaker, which he says is "not working right all the time"?
Many thanks,
Sergei
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,
Any solution for the above mentioned problem?

Thanks
Kini
May 27,
Hi,
Can someone tell me
were should i add the patch
suggested by Alex on Monday, August 16, 2004
in this thread.

Urgent plz.!
Vipin
October 5,

Haha - that is why, I keep telling Alex to merge the fixes. AW must not suffer from these silly configuration management issues.

Vipin,

This change will go in http/request.js and in order to do so you will have to switch to 'source' from 'runtime' which is not suggested for production systems. I had a script to make runtime js from source. I'll see if I can find that code.

Cheers,
Sudhaker Raj
Sudhaker Raj
October 6,

There is an ANT build file in this archive, which can very well join all required files in correct order. This can be a life save in case you are making some change.

http://activewidgets.thej2ee.com/dist/simplegrid.tar.gz

Cheers,
Sudhaker Raj
Sudhaker Raj
October 6,
Hi Sudhakar,
Thanx for da reply.
But link u provided doesn't work. :-(

Even the new Beta release has the same bug.
Why haven't they fixed it ?
Vipin
October 6,
I have noticed that this problem still persists in the version 1.0.2 or at least when one use a JS Array as a data container.
Neil Craig (neil.big.craig@gmail.com)
February 21,

This topic is archived.

See also:


Back to support forum