我正在尝试使jqGrid中的导航箭头正常工作。 MVC 3 RC2,实体框架4,.NET Framework 4,jqGrid 3.8.2
问题是,我没有记录从1到10,11到20等等。似乎.skip方法无法正常工作。
jqGrid使用正确的参数调用ActionResult。
也许你有个主意?
的问候,
浮
//
// Post: /Admin/IndexGridData
// Gibt ein JSON Result mit allen Aufträgen für das jqGrid zurück
[HttpPost]
public ActionResult IndexGridData(string sidx, string sord, int page, int rows)
{
// Ermittlung der Zusatzinformationen die das Grid anzeigt (Anzahl Aufträge, momentan angezeigte Aufträge
int start = (page -1) * rows;
int summeauftraege = _db.Auftrag.Where(x => x.AuftragStatus != "storno").Count();
int totalPages = (int)Math.Ceiling((float)summeauftraege / (float)rows);
var auftraege = (from auftrag in _db.Auftrag
.Include("KT_AuftragStatus")
.Include("KT_Bearbeitungsort")
.Include("AuftragPartner")
select new
{
Titel = auftrag.Titel,
Auftrag_GUID = auftrag.Auftrag_GUID,
Bearbeitungsort = auftrag.KT_Bearbeitungsort.Text,
AuftragStatus = auftrag.KT_AuftragStatus.Text,
}).Where(x => x.AuftragStatus != "storniert").OrderBy(x => x.Titel)
.Skip(start)
.Take(rows)
.AsEnumerable().ToList();
// Sortierung des Grids anwenden
if (sidx == "Titel" && sord == "asc")
{
auftraege = auftraege.OrderBy(x => x.Titel).AsEnumerable().ToList();
}
else if (sidx == "Titel" && sord == "desc")
{
auftraege = auftraege.OrderByDescending(x => x.Titel).AsEnumerable().ToList();
}else if (sidx == "Bearbeitungsort" && sord == "asc")
{
auftraege = auftraege.OrderBy(x => x.Bearbeitungsort).AsEnumerable().ToList();
}
else if (sidx == "Bearbeitungsort" && sord == "desc")
{
auftraege = auftraege.OrderByDescending(x => x.Bearbeitungsort).AsEnumerable().ToList();
}
else if (sidx == "AuftragStatus" && sord == "asc")
{
auftraege = auftraege.OrderBy(x => x.AuftragStatus).AsEnumerable().ToList();
}
else if (sidx == "AuftragStatus" && sord == "desc")
{
auftraege = auftraege.OrderByDescending(x => x.AuftragStatus).AsEnumerable().ToList();
}
// Erstellung des JSON Objekts welches die einzelnen Aufträge enthält
var jsonauftraege = new object[auftraege.Count()];
for (int i = 0; i < auftraege.Count; i++)
{
jsonauftraege[i] = new
{
id = auftraege[i].KA_Auftrag_GUID,
cell = new[] {
"Details",
"Bearbeiten",
(auftraege[i].Titel != null) ? auftraege[i].Titel.ToString(): " ",
(auftraege[i].Bearbeitungsort != null) ? auftraege[i].Bearbeitungsort.ToString(): " ",
(auftraege[i].AuftragStatus != null) ? auftraege[i].AuftragStatus.ToString(): " ",
}
};
}
// Erstellung des JSON Results welches das Grid versteht
var result = new JsonResult();
result.Data = new { page = page, records = summeauftraege, rows = jsonauftraege, total = totalPages };
return Json(result.Data);
}
答案 0 :(得分:1)
.OrderBy()
需要 .Skip()
之前的。据我所知,按照你的方式做它甚至不应该工作。如果它可以工作,你可能在对象空间,而不是L2E。您必须在之前订购,否则请跳过或参加。
答案 1 :(得分:1)
这是解决方案:
//
// Post: /Admin/IndexGridData
// Gibt ein JSON Result mit allen Aufträgen für das jqGrid zurück
[HttpPost]
public ActionResult IndexGridData(string sidx, string sord, int page, int rows)
{
// Ermittlung der Zusatzinformationen die das Grid anzeigt (Anzahl Aufträge, momentan angezeigte Aufträge
int start = (page - 1) * rows;
var auftraege = _db.Auftrag
.Where(x => x.AuftragStatus != "storno")
.OrderBy(x => x.Titel)
.Select(auftrag => new AuftragModels.GridAnsicht
{
Auftrag_GUID = auftrag.Auftrag_GUID,
Titel = auftrag.Titel,
Bearbeitungsort = auftrag.KT_Bearbeitungsort.Text,
AuftragStatus = auftrag.KT_AuftragStatus.Text,
}
);
}
// zusammen gesetztes SQL Statement speichern
var sqlstring = ((ObjectQuery)auftraege).ToTraceString();
// Sortierung des Grids anwenden
if (sidx == "Titel" && sord == "asc")
{
auftraege = auftraege.OrderBy(x => x.Titel);
}
else if (sidx == "Titel" && sord == "desc")
{
auftraege = auftraege.OrderByDescending(x => x.Titel);
}
else if (sidx == "Bearbeitungsort" && sord == "asc")
{
auftraege = auftraege.OrderBy(x => x.Bearbeitungsort);
}
else if (sidx == "Bearbeitungsort" && sord == "desc")
{
auftraege = auftraege.OrderByDescending(x => x.Bearbeitungsort);
}
else if (sidx == "AuftragStatus" && sord == "asc")
{
auftraege = auftraege.OrderBy(x => x.AuftragStatus);
}
else if (sidx == "AuftragStatus" && sord == "desc")
{
auftraege = auftraege.OrderByDescending(x => x.AuftragStatus);
}
// zusammen gesetztes SQL Statement speichern
//sqlstring = ((ObjectQuery)auftraege).ToTraceString();
// aufträge zu einer Liste speichern, damit diese durchlaufen werden kann
var auftragListe = auftraege
.AsEnumerable().ToList();
// Anzahl der Seiten berechnen
int summeauftraege = auftragListe.Count();
int totalPages = (int)Math.Ceiling((float)summeauftraege / (float)rows);
// nur die Aufträge anzeigen, die auf eienr Seite sichtbar sind
auftragListe = auftragListe
.Skip(start)
.Take(rows)
.AsEnumerable().ToList();
// Erstellung des JSON Objekts welches die einzelnen Aufträge enthält
var jsonauftraege = new object[auftragListe.Count()];
for (int i = 0; i < auftragListe.Count(); i++)
{
jsonauftraege[i] = new
{
id = auftragListe[i].Auftrag_GUID,
cell = new[] {
"Details",
"Bearbeiten",
(auftragListe[i].Titel != null) ? auftragListe[i].Titel.ToString(): " ",
(auftragListe[i].Bearbeitungsort != null) ? auftragListe[i].Bearbeitungsort.ToString(): " ",
(auftragListe[i].AuftragStatus != null) ? auftragListe[i].AuftragStatus.ToString(): " ",
}
};
}
// Erstellung des JSON Results welches das Grid versteht
var result = new JsonResult();
result.Data = new { page = page, records = summeauftraege, rows = jsonauftraege, total = totalPages };
return Json(result.Data);
}