Я довольно новичок в SharePoint (я использую SharePoint 2013) и вообще в среде .NET, и я нахожу следующие трудности.
В моем коде у меня есть этот метод, которыйотлично работает:
internal static Table CreaFormTabIndiciSceltaEtichetteFacoltative(List<EtichettaFacoltativaModel> etichetteFacoltativeList)
{
SPWeb contextWeb = SPContext.Current.Web;
Table table = new Table();
table.CellPadding = 0;
table.CellSpacing = 0;
table.Width = Unit.Percentage(70);
/*
* Iterate on this list, for each element of this list exist a SharePoint list
*/
foreach (EtichettaFacoltativaModel currentEntichetta in etichetteFacoltativeList)
{
Debug.WriteLine("TAB INDICI, etichetta facoltativa corrente: " + currentEntichetta.nomeLista);
// Retrieve the SharePoint list related to the current object:
SPList listaCampiOpzionaliEtichettaCorrente = contextWeb.Lists[currentEntichetta.nomeLista];
TableRow row = new TableRow();
TableCell cell = new TableCell();
cell.Width = Unit.Percentage(30);
cell.VerticalAlign = VerticalAlign.Top;
cell.Attributes.Add("class", "ms-formlabel");
cell.Controls.Add(new LiteralControl(currentEntichetta.nomeLista));
cell.Font.Bold = true;
row.Cells.Add(cell);
DropDownList currentEtichettaDropDown = new DropDownList();
currentEtichettaDropDown.CssClass = "chosen-select";
currentEtichettaDropDown.ID = "dd";
/*
* Populate the current dropdown with the items in the current SharePoint list:
*/
foreach (SPListItem campoCorrente in listaCampiOpzionaliEtichettaCorrente.Items)
{
currentEtichettaDropDown.Items.Add(new ListItem(campoCorrente.GetFormattedValue("Descrizione")));
}
cell = new TableCell();
cell.Controls.Add(currentEtichettaDropDown);
cell.Font.Bold = true;
row.Cells.Add(cell);
table.Rows.Add(row);
}
return table;
}
Как видите, я получаю список SharePoint из SharePoint.Для каждого из этих списков я создаю выпадающий элемент, содержащий элементы в текущем списке.Довольно просто.
Моя проблема в том, что в реальном случае использования мне не нужно использовать эту строку для заполнения раскрывающегося списка:
currentEtichettaDropDown.Items.Add(new ListItem(campoCorrente.GetFormattedValue("Descrizione")));
Но я должен использовать 2 параметра ListItem конструктор:
currentEtichettaDropDown.Items.Add(new ListItem(campoCorrente.GetFormattedValue("Descrizione"), campoCorrente.GetFormattedValue("COD_XXX")));
И здесь у меня большая проблема, потому что у меня есть разные списки SharePoint (представленные в этом примере различными SPListItem экземплярами.Каждый из этих списков SharePoint имеет другое имя для этого второго поля (поэтому я не могу сделать campoCorrente.GetFormattedValue ("field_name") , поскольку это зависит от конкретного текущего списка SharePoint.
Единственное, что я уверен, что все эти поля имеют имя, которое начинается со строки COD (поэтому в списке имя будет COD Commessa , в другом списке Cod Iniziativa и т. Д.)
Как выбрать поле с именем, начинающимся с COD в текущем списке SharePoint, в псевдокоде что-то вроде этого:
campoCorrente.GetFormattedValue(THE FIELD NAME STARTING WITH "COD");