在 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中检索n个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 ,在另一个列表中鳕鱼饭,依此类推)。
如何在当前SharePoint列表中选择名称以 COD 开头的字段,其伪代码如下所示:
campoCorrente.GetFormattedValue(THE FIELD NAME STARTING WITH "COD");