:: Forum >> Version 2 >>

[**BUG**] Add/Del Rows

Hi Alex,

I found a bad bug in add/del rows.

Its like when u delete any rows ur table data doenst work anymore.

I have a example to explain better:
<html>
<
head>
    <
title>ActiveWidgets Bug</title>
    <
script src="../runtime/lib/aw.js"></script>
    <
link href="../runtime/styles/xp/aw.css" rel="stylesheet"></link>
</
head>
<
body>
<
style>

</
style>
<
span id="grid"></span>
<
script>
var 
obj = new AW.UI.Grid;
obj.setId("grid");
obj.setHeaderText(["ID""Description""Total"]);
obj.setColumnCount(3);
obj.setCellEditable(true);
obj.setFooterCount(1);
obj.setFooterVisible(true);
obj.setFooterTemplate(new AW.Templates.Text2);
obj.setFooterText(function() { return "Total: " mostraTotal(obj); }, 2);
obj.onCellEditEnded = function() {
    
obj.getFooterTemplate(2).refresh( );
}
obj.refresh( );


function 
mostraTotalobj ) {
    var 
tot 0;
    for(var 
i=0;i<obj.getRowCount();i++)
        
tot += Number(obj.getCellValue(2i))
    return 
tot;
}
var 
serial 0;
function 
addRow() {
    
obj.addRow(serial++);
}

function 
delRow() {
    if(
obj.getCurrentRow() != -1) {
        
obj.deleteRow(obj.getCurrentRow());
        
obj.getFooterTemplate(2).refresh( );
    }
}
</
script>
<
input type="button" value="addRow" onclick="addRow()" />
<
input type="button" value="delRow" onclick="delRow()"/>
</
body>
</
html>
 
Usage:
Insert rows and set the value for Total column, in cellEditEnded event the footer (total) will show the count of values. Remove the first row and then try add more and look at the count. Its messed up.

I need a fix please, help.

Tkz Alex.
Pc (from Brazil)
Sunday, February 11, 2007
Hi,

The docs at http://www.activewidgets.com/aw.ui.grid/deleterow.html seem to indicate that the deleted row is hidden rather than deleted.
You might need to use obj.getRowIndices() in mostraTotal and ensure the row is visible before including it in the count.

Further, I observed that you haven't used obj.setCellData()/obj.setCellText() or obj.setRowCount().
Not sure if that will cause any problems, but if it causes problems and you need to include those, take a look at /javascript.forum.16572.1/no-subject.html

Ankur
Ankur Motreja
Monday, February 12, 2007
Tkz Ankur, ill try using your modification.
Pc (from Brazil)
Monday, February 12, 2007
Hi, im back.

I cant do that, if i set the cellData, my grid doenst work anymore, i tried with:

var mydata = [[]];
obj.setCellData(mydata);

When i insert 2 rows, my grid fucked up.

Alex, can u help me please?!
Tkz.
Pc (from Brazil)
Monday, February 12, 2007
Hi,

The link /javascript.forum.16572.1/no-subject.html that I gave above describes the same problem and there are 2 workarounds mentioned in the post.

Ankur
Ankur Motreja
Monday, February 12, 2007
i apreciate ur help Ankur, but like i said before, if i try to set the data object, things got messed up, understand? I tried what u said and its not work like i want to.

<html>
<
head>
    <
title>ActiveWidgets Bug</title>
    <
script src="../runtime/lib/aw.js"></script>
    <
link href="../runtime/styles/xp/aw.css" rel="stylesheet"></link>
</
head>
<
body>
<
style>

</
style>
<
span id="grid"></span>
<
script>
var 
obj = new AW.UI.Grid;
obj.setId("grid");
obj.setHeaderText(["ID""Description""Total"]);
obj.setColumnCount(3);
obj.setCellEditable(true);
var 
data = [];
obj.setCellData(data);
obj.setFooterCount(1);
obj.setFooterVisible(true);
obj.setFooterTemplate(new AW.Templates.Text2);
obj.setFooterText(function() { return "Total: " mostraTotal(obj); }, 2);
obj.onCellEditEnded = function() {
    
obj.getFooterTemplate(2).refresh( );
}
obj.refresh( );


function 
mostraTotalobj ) {
    var 
tot 0;
    for(var 
i=0;i<obj.getRowCount();i++)
        
tot += Number(obj.getCellValue(2i))
    return 
tot;
}
var 
serial 0;
function 
addRow() {
     
data[data.length] = [data.length,2,3];
     
obj.addRow(data.length-1);
     if (
data.length == 1) {
       
obj.setCellData(data); 
       
obj.refresh();
     }
}

function 
delRow() {
    if(
obj.getCurrentRow() != -1) {
        
obj.deleteRow(obj.getCurrentRow());
        
obj.getFooterTemplate(2).refresh( );
    }
}
</
script>
<
input type="button" value="addRow" onclick="addRow()" />
<
input type="button" value="delRow" onclick="delRow()"/>
</
body>
</
html>
 
Your 2 workarounds its not working for me, u can try.

Tkz anyway.
Pc (from Brazil)
Tuesday, February 13, 2007
Currently you cannot assign an empty array as grid data, because the grid expects two-dimensional array, try using data=[[]] instead of data=[];

Also if you add/delete rows - the row count might be different for the array length, so you have to use array of actual row indices and not just cycle 0..rowCount()

http://www.activewidgets.com/aw.ui.grid/deleterow.html
Alex (ActiveWidgets)
Tuesday, February 13, 2007
Ok Alex, i did using your way.

Now, i have a question:
<html>
<
head>
    <
title>ActiveWidgets Bug</title>
    <
script src="../runtime/lib/aw.js"></script>
    <
link href="../runtime/styles/xp/aw.css" rel="stylesheet"></link>
</
head>
<
body>
<
style>

</
style>
<
span id="grid"></span>
<
script>
var 
obj = new AW.UI.Grid;
obj.setId("grid");
obj.setHeaderText(["ID""Description""Total"]);
obj.setColumnCount(3);
obj.setCellEditable(true);
var 
data = [[]];
obj.setCellData(data);
obj.setFooterCount(1);
obj.setFooterVisible(true);
obj.setFooterTemplate(new AW.Templates.Text2);
obj.setFooterText(function() { return "Total: " mostraTotal(obj); }, 2);
obj.onCellEditEnded = function() {
    
obj.getFooterTemplate(2).refresh( );
}
obj.refresh( );


function 
mostraTotalobj ) {
    var 
tot 0;
    for(var 
i=0;i<obj.getRowCount();i++)
        
tot += Number(obj.getCellValue(2i)) // doenst work
               // tot += Number(obj.getCellText(2, i)); // work
    
return tot;
}

var 
serial 0;
function 
addRow() {
    
obj.addRow(serial++);
}

function 
delRow() {
    if(
obj.getCurrentRow() != -1) {
        
obj.deleteRow(obj.getCurrentRow());
        
obj.getFooterTemplate(2).refresh( );
    }
}
</
script>
<
input type="button" value="addRow" onClick="addRow()" />
<
input type="button" value="delRow" onClick="delRow()"/>
</
body>
</
html>
 
Why using getCellValue doenst work??
And what can i do to retrieve the value from data in "mostraTotal" function?!

I think, it would be something like this:

var first_row data[0];
var 
first_row_cell first_row[0];
 
But doenst work too, the value is empty.

Tkz in advance.
Pc (from Brazil)
Wednesday, February 14, 2007



This topic is archived.

Back to support forum

Forum search