Sorting List Items (Latest one first)

安稳与你 提交于 2019-12-12 18:40:28

问题


I am having trouble displayin the values of list itmes in the proper order. The following are the fields in the list (with their actual system names):

-Title -Category -NominatedWon -Logo

The "Title" field contains year values eg, "2011", "2010", etc.

//getting the awards list and extracting correct values from the necesary fields
//asp running with elevated privilegs
SPSecurity.RunWithElevatedPrivileges(delegate()
{

using (SPSite site = new SPSite(webUrl))
{
using (SPWeb web = site.OpenWeb())
{



try
{

SPList awardsList = web.Lists["Awards"];

SPListItemCollection listItemCollection = awardsList.Items;



 //Creating the table
 Table tbl = new Table();

 //foreach (SPListItem oListItem in listItemCollection)
 int x = listItemCollectionI.Count;

 for(int i = 0; (i * 2) < x; i++) // divide total item collection by two, each loop 
 iteration, add two awards to a row (left cell, right cell)
 {
 // get listItemCollection[i];
 //Create table rows, table cells

 int leftIndexer = i * 2;
 int rightIndexer = (i * 2) + 1;

 if (leftIndexer == x)
 {
 break;
 }                                

 TableRow tblRow = new TableRow();
 TableCell tblCellLeft = new TableCell(); //for the awards in the first column
 TableCell tblCellRight = new TableCell(); //for the awards in the second column

 tblCellLeft.VerticalAlign = VerticalAlign.Top;
 tblCellLeft.HorizontalAlign = HorizontalAlign.Center;
 tblCellLeft.CssClass = ("style5");

 tblCellRight.VerticalAlign = VerticalAlign.Top;
 tblCellRight.HorizontalAlign = HorizontalAlign.Center;


 // get the values
 awardYear = listItemCollection[leftIndexer]["Title"].ToString();
 awardCategory = listItemCollection[leftIndexer]["Category"].ToString();
 awardNomWon = listItemCollection[leftIndexer]["NominatedWon"].ToString();

 if(listItemCollection[leftIndexer]["Logo"] != null)
 awardLogo = (string)listItemCollection[leftIndexer]["Logo"];

 // add to left cell
 //values for the left column
 tblCellLeft.Controls.Add(new LiteralControl("<div class=\"style1\">" + awardYear + 
 "</div>"));
 tblCellLeft.Controls.Add(new LiteralControl("<div class=\"style2\">" + awardCategory 
 + "</div>"));
 tblCellLeft.Controls.Add(new LiteralControl("<div class=\"style3\">" + awardNomWon + 
 "</div>"));
 tblCellLeft.Controls.Add(new LiteralControl("<div class=\"style4\">" + "<img src=" + 
 awardLogo.Replace(",", "") + "</div>"));

 // add left cell to row
 tblRow.Cells.Add(tblCellLeft);

 if (rightIndexer < x) // if this item exists in the collection (prevent bug with odd 
 number of awards)
 {


 // get the values
 awardYear = listItemCollection[rightIndexer]["Title"].ToString();
 awardCategory = listItemCollection[rightIndexer]["Category"].ToString();
 awardNomWon = listItemCollection[rightIndexer]["NominatedWon"].ToString();

 if (listItemCollection[rightIndexer]["Logo"] != null)
 awardLogo = (string)listItemCollection[rightIndexer]["Logo"];


 // add to right cell
 //Values for the right column
 tblCellRight.Controls.Add(new LiteralControl("<div class=\"style1\">" + awardYear + 
 "</div>"));
 tblCellRight.Controls.Add(new LiteralControl("<div class=\"style2\">" + awardCategory 
 + "</div>"));
 tblCellRight.Controls.Add(new LiteralControl("<div class=\"style3\">" + awardNomWon + 
 "</div>"));
 tblCellRight.Controls.Add(new LiteralControl("<div class=\"style4\">" + "<img src=" + 
 awardLogo.Replace(",", "") + "</div>"));

 // add right cell to row
 tblRow.Cells.Add(tblCellRight);
 }

 // add row to table
 tbl.Rows.Add(tblRow);

 }

 PlaceHolder6.Controls.Add(tbl); // add table outside of loop 
 }
 catch (Exception err)
 {
 PlaceHolder3.Controls.Add(new LiteralControl(err.ToString()));
 }

 }
 }



 });

So the output for some reason seems to show the two latest lists items eg list item "2012", and list item "2011" are displayed at the bottom. In theory these should be displayed at the top followed by the rest of the list items.

Any sugestions on this will be greatly appreciated!

Thanks


回答1:


There's nothing in your code to indicate the order, use something along the lines of:

SPList awardsList = web.Lists["Awards"];                     

SPQuery q = new SPQuery();
q.Query="<OrderBy><FieldRef Name='Title' /></OrderBy>";

SPListItemCollection listItemCollection = awardsList.Items.GetItems(q);   



回答2:


Don't you have to use something like: listItemCollection.OrderBy(i=>i.Title).ThenBy(i=>i.Category).ThenBy(i=>i.NominatedWon).ThenBy(i=>i.Logo)



来源:https://stackoverflow.com/questions/8894721/sorting-list-items-latest-one-first

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!