Schnelles Problem Sortierung:Tabelle nicht richtig in bestimmten Spalte (MVC)
Ich habe einige verwendet Javascript finde ich meine Tabellen all ihren Kopf klicken, um zu sortieren, und dies in den meisten Fällen absolut einwandfrei funktioniert. Strings, Ints, usw. werden bei richtiger Kennzeichnung auf der ganzen Seite korrekt sortiert.
function sortTable(n) {
var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0; //declares necessary variables
table = document.getElementById("toSortTable");
switching = true;
dir = "asc";
while (switching) {
switching = false;
rows = table.getElementsByTagName("tr");
for (i = 1; i < (rows.length - 1) ; i++) {
shouldSwitch = false;
x = rows[i].getElementsByTagName("td")[n];
y = rows[i + 1].getElementsByTagName("td")[n];
if (dir == "asc") {
if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) { //compares the 2 values
shouldSwitch = true;/
break;
}
} else if (dir == "desc") {
if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
shouldSwitch = true;
break;
}
}
}
if (shouldSwitch) {
rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
switching = true;
switchcount++;
} else {
if (switchcount == 0 && dir == "asc") {
dir = "desc";
switching = true;
}
}
}
}
Wie gesagt, diese JS auf den meisten Seiten zu funktionieren scheint i zuweisen, aber es gibt mir ein paar Probleme in einer Tabelle. Auf einem meiner Tische liefert die Sortierung einfach nicht die richtige Reihenfolge.
https://imgur.com/a/7EZ5y (weiß nicht, wie diese einzubetten)
Die Tabelle angeklickt wurde (das heißt sortiert) in beiden Bildern von insgesamt Abrechnungskosten. Ich habe gelesen, dass eine verpatzte Sortierung auftreten kann, wenn einer der Werte einen Leerraum enthält, also wird das Feld als Zeichenkette anstelle von dec/int erkannt, aber das war in der DB nicht der Fall, ebenso wie der seltsame Eintrag, der in der Mitte und nicht vor/nach dem Rest der Ints/Dez.
Das einzige, was ich zu sein off vorstellen kann, ist mein Controller, dass meine auffüllt VM:
public ActionResult Index()
{
List<InvoiceVM> listOfInvoices = new List<InvoiceVM>();
var iNVOICES = db.INVOICES.Include(i => i.INVOICES_TO_CREDIT);
foreach (var entry in iNVOICES)
{
bool check = false;
foreach (var checkDupe in listOfInvoices)
{
if (checkDupe.invoiceNo == entry.INV_NO)
{
check = true;
}
}
if (check == true)
{
check = false;
}
else
{
InvoiceVM toAdd = new InvoiceVM();
toAdd.account = entry.ACCOUNT;
toAdd.subDate = entry.SUB_DATE;
toAdd.cc = entry.CC;
toAdd.reference = entry.SOLUTION_OWNER;
toAdd.invoiceNo = entry.INV_NO;
toAdd.project = entry.PROJECT_ID;
toAdd.ikeaProject = entry.SLTN_NAME;
toAdd.invoiceNo = entry.INV_NO;
toAdd.autoNo = Convert.ToInt32(entry.AUTO_ID);
foreach (var invoice in iNVOICES)
{
if (invoice.INV_NO == toAdd.invoiceNo)
{
toAdd.totalCost += Convert.ToInt32(invoice.EMP_TOTAL_COST);
}
}
listOfInvoices.Add(toAdd);
}
}
return View(listOfInvoices);
}
(Ich weiß, das wahrscheinlich über einige super einfach GroupBy + Summe gelöst werden könnte diesen Code machen sehen super Müll, glücklich diesen Vorschlag zu nehmen, wenn jemand es aufstellen möchte).
Wie auch immer, das wird korrekt ausgefüllt, da die in den obigen Bildern angezeigten Werte die richtigen Summen von Werten in der tatsächlichen Rechnungstabelle sind. Außerdem sind die einzelnen Werte auf den "Gesamtkosten" für die 42k höher als die 11k (falls die Sortierung einen ursprünglichen Wert anstelle des summierten Werts verwendet hat). Beide Werte wurden im Controller durch andere Werte kombiniert. Dies ist jedoch nicht relevant, sobald die Werte an eine VM übergeben wurden.
Ich würde nach mehr Antworten darauf suchen, und ich bin mir sicher, dass der Fehler irgendwo in meinem Controller ist, aber ich habe einfach keine Ahnung, wonach ich suchen soll. Die Sortierung funktioniert perfekt in allen anderen Tabellen und funktioniert auch perfekt in der Tabelle auf derselben Seite für alle Spalten außer der Gesamtkosten. Jede Hilfe wäre willkommen.
Vielen Dank!
Sie scheinen absolut richtig zu sein, dass die JS es niemals schafft, Zahlen richtig zu sortieren, aber es gelang, die wenigen Einträge, die wir ausprobierten, auszumachen. Hoppla! Ich suchte das DataTables-Paket auf und es enthielt eine Menge Funktionen, die ich sowieso auf der ganzen Linie brauchen würde. Nach ein paar Höhen und Tiefen wegen schäbiger Manuals habe ich es geschafft, es perfekt funktionieren zu lassen. Vielen Dank! –