Создание таблицы в коде позади - PullRequest
1 голос
/ 16 января 2012

Привет! У меня есть веб-часть, где я создаю таблицу в коде для отображения значений элементов списка для списка «Награды» в таблице из двух столбцов, где каждая награда отображается рядом в столбцах буксировки.Я использую цикл foreach, чтобы получить все значения элементов списка и одновременно создать таблицу.

Проблема в том, что по некоторым причинам отображаются не все значения элементов списка.Также значения элементов списка повторяются в выводе.Ниже приведен фрагмент кода, который у меня есть:

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

try
{

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

SPListItemCollection listItemCollection = awardsList.Items;

int modCounter = 0;
foreach (SPListItem oListItem in listItemCollection)
{
modCounter += 1;

awardYear = oListItem["Year"].ToString();
awardCategory = oListItem["Category"].ToString();
awardNomWon = oListItem["NominatedWon"].ToString();
awardLogo = oListItem["Logo"].ToString(); //need to fingure out how to display images

Table tbl = new Table();
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;


//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>"));

//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>"));

//adding Rows
tblRow.Cells.Add(tblCellLeft);
tblRow.Cells.Add(tblCellRight);
tbl.Rows.Add(tblRow);

if (modCounter % 2 == 0)
{                            
//values from tblCellLeft
PlaceHolder6.Controls.Add(tbl);
}
else
{
//values from the tblRightCell
PlaceHolder2.Controls.Add(tbl);
}

}

}
catch (Exception err)
{
PlaceHolder3.Controls.Add(new LiteralControl(err.ToString()));
}

}
}


});

Я не уверен, в чем проблема.Любая помощь будет принята с благодарностью.

Спасибо

Ответы [ 2 ]

1 голос
/ 17 января 2012

Мне удалось решить эту проблему, используя цикл for следующим образом:

//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;


//getting all list items and displaying them next to each other row by row


//int modCounter = 0;

//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()));
}

}
}



});

Однако теперь возникает другая проблема. Возвращенные значения не сортируются в правильном порядке, другими словами, по какой-то причине последний элемент списка перемещается вниз, где он должен быть вверху. Другие значения отображаются в правильном порядке.

У кого-нибудь есть предложения, чтобы отсортировать их в правильном порядке? Это будет с благодарностью.

Спасибо

0 голосов
/ 16 января 2012

Я предполагаю, что вы хотите, чтобы все ваши результаты были в одной таблице?

В этом случае вы хотите убедиться, что вы объявляете новый Table только один раз .Для этого объявите вашу таблицу до , и вы начнете цикл foreach.

Table tbl = new Table(); 
foreach (SPListItem oListItem in listItemCollection) 
{
   // get data
   // create cells & rows
   // insert data into cells, cells into rows, and rows into table
}
...