Hej, För att kunna sortera datat igen måste det ligga i en cookie eller en sessionsvariabel. Detta eftersom http är stateless. Och lägga så mycket data i en variabel är inte att rekommandera. Jag har ett Javascript som löser detta. Det sorterar alltså på klienten.Sortera en hämtad lista på nytt. LÖST
Någon som vet om det är möjligt att sortera om en sida som är hämtad från en databas utan att hämta all data igen (brukar ligga på 300-400 poster).
Jag har ett antal kolumner och har en standard sortering men sedan skulle jag vilja ge möjlighet för användarna att klicka på kolumnrubriken för en annan kolumn och få den sorterad efter den istället....
//FredrikSv: Sortera en hämtad lista på nytt
Med andra ord, hämta datat på nytt och sortera..Sv: Sortera en hämtad lista på nytt
Här här själva scriptet(denna sida är helt statisk, så du får implemtera den i ditt rs):
<code>
<SCRIPT LANGUAGE="JAVASCRIPT">
function createRowsArray (table) {
var rows = new Array();
var r = 0;
if (table.tHead == null && table.tFoot == null)
for (var r1 = 0; r1 < table.rows.length; r1++, r++)
rows[r] = table.rows[r1];
else
for (var t = 0; t < table.tBodies.length; t++)
for (var r1 = 0; r1 < table.tBodies[t].rows.length; r1++, r++)
rows[r] = table.tBodies[t].rows[r1];
return rows;
}
function insertSortedRows(table, rows) {
if (document.all) var rowsCopy = new Array(rows.length)
for (var r = 0; r < rows.length; r++) {
if (document.all) rowsCopy[r] = rows[r].cloneNode(true);
table.deleteRow(rows[r].rowIndex);
}
var tableSection = table.tBodies[table.tBodies.length - 1];
for (var r = 0; r < rows.length; r++) {
var row = document.all ? rowsCopy[r] : rows[r];
tableSection.appendChild(row);
}
}
function sortTable (table, sortFun) {
var rows = createRowsArray(table);
if (rows.length > 0) {
rows.sort(sortFun);
insertSortedRows(table, rows);
}
}
function sortRowsAlpha (row1 , row2) {
var column = sortRowsAlpha.col;
var cell1 = row1.cells[column].firstChild.nodeValue;
var cell2 = row2.cells[column].firstChild.nodeValue;
return cell1 < cell2 ? - 1 : (cell1 == cell2 ? 0 : 1);
}
function sortRowsNumber (row1 , row2) {
var column = sortRowsNumber.col;
var cell1 = parseFloat(row1.cells[column].firstChild.nodeValue);
var cell2 = parseFloat(row2.cells[column].firstChild.nodeValue);
return cell1 < cell2 ? - 1 : (cell1 == cell2 ? 0 : 1);
}
function sortRowsLink (row1 , row2) {
var column = sortRowsLink.col;
var cell1 = findFirstLinkChild(row1.cells[column]).href;
var cell2 = findFirstLinkChild(row2.cells[column]).href;
return cell1 < cell2 ? - 1 : (cell1 == cell2 ? 0 : 1);
}
function findFirstLinkChild (el) {
var child = el.firstChild;
while (child.tagName != 'A')
child = child.nextSibling;
return child;
}
function testSortTable(table, col) {
sortRowsAlpha.col = col;
sortTable(table, sortRowsAlpha);
}
function testSortTableNumerical (table, col) {
sortRowsNumber.col = col;
sortTable(table, sortRowsNumber);
}
function testSortTableLinks (table, col) {
sortRowsLink.col = col;
sortTable(table, sortRowsLink);
}
function findTableParent (node) {
while (node.tagName.toUpperCase() != 'TABLE')
node = node.parentNode;
return node;
}
</SCRIPT>
</code>
Sen kommer tabellen i <body>, där man klickar på rubriken eller på knapparna för att sortera. Notera att det är olika funktioner för vilken typ av sortering(numerisk,text eller länk):
<code>
<BODY>
<BUTTON ONCLICK="testSortTable(document.getElementById('aTable'), 0);">sort col 0</BUTTON>
<BUTTON ONCLICK="testSortTableLinks(document.getElementById('aTable'), 1);">sort col 1</BUTTON>
<BUTTON ONCLICK="testSortTableNumerical(document.getElementById('aTable'), 2);">sort col 2 numerical</BUTTON>
<BR>
<TABLE ID="aTable">
<THEAD>
<TR>
<TH ONCLICK="testSortTable(findTableParent(this), this.cellIndex);">Project Manager</TH>
<TH ONCLICK="testSortTableLinks(findTableParent(this), this.cellIndex);">View</TH>
<TH ONCLICK="testSortTableNumerical(findTableParent(this), this.cellIndex);">ID</TH>
</TR>
</THEAD>
<TBODY>
<TR>
<TD>Chris A Veale</TD>
<TD>View</TD>
<TD>61</TD>
</TR>
<TR>
<TD>Aoachim Feldt</TD>
<TD>View</TD>
<TD>84</TD>
</TR>
<TR>
<TD>Kalle Johansson</TD>
<TD>View</TD>
<TD>12</TD>
</TR>
<TR>
<TD>Stina Berggren</TD>
<TD>View</TD>
<TD>8</TD>
</TR>
<TR>
<TD>Sven Pettewrson</TD>
<TD>View</TD>
<TD>45</TD>
</TR>
<TR>
<TD>Pelle Matsson</TD>
<TD>View</TD>
<TD>1</TD>
</TR>
</TBODY>
</TABLE>
</BODY>
</code>