我正在访问这样的SharePoint列表:
#region Accessing share point
Microsoft.SharePoint.Client.ClientContext cC = new Microsoft.SharePoint.Client.ClientContext(Link);
cC.Credentials = System.Net.CredentialCache.DefaultCredentials;
Microsoft.SharePoint.Client.List SPList = cC.Web.Lists.GetByTitle(ListName);
cC.Load(SPList.Fields);
Microsoft.SharePoint.Client.FieldCollection Fields = SPList.Fields;
#endregion
循环显示字段,我有不同字段的所有名称信息。我可以这样做:
int i = 0;
foreach(Microsoft.SharePoint.Client.Field FL in Fields)
{
WriteLine("Index: " + i++ + "; Internal name: " + FL.InternalName + "; Static name: " + FL.StaticName + "; Title: " + FL.Title);
}
出口如下:
指数5;内部名称:Lieferant_x0020__x0028_Nummer_x0;静态名称:Lieferant_x0020__x0028_Nummer_x0;标题:Lieferant(Nummer)
如您所见,sharepoint通过使用unicode存储其他字符的内部名称。仅在“FL.Title”中存储名称,因为用户可以在sharepoint列表中看到它。
现在,我想将这些数据放在DataTable中并对其进行过滤。我可以这样做:
Microsoft.SharePoint.Client.CamlQuery cQuery = new Microsoft.SharePoint.Client.CamlQuery();
cQuery = Microsoft.SharePoint.Client.CamlQuery.CreateAllItemsQuery();
Microsoft.SharePoint.Client.ListItemCollection LIC = SPList.GetItems(cQuery);
cC.Load(LIC);
cC.ExecuteQuery();
dt = new DataTable();
#region Create columns
foreach (var Field in LIC[0].FieldValues)
{
dt.Columns.Add(Field.Key);
}
#endregion
#region Reading data
foreach (Microsoft.SharePoint.Client.ListItem It in LIC)
{
System.Data.DataRow row = dt.NewRow();
foreach(var Field in It.FieldValues)
{
row[Field.Key] = Field.Value;
}
dt.Rows.Add(row);
}
#endregion
问题是,在ListItemCollection中,只有具有Unicode的附加字符的内部名称可用。我也无法对其进行编码,因为SharePoint 2010只有32个字符用于内部名称,导致剪切名称不再完整。
是否有可能从KeyValuePair
ListItem.FieldValues
的Listcolumns中获取标题?实际上,KeyValuePairs
的构建方式如下:
<br>
It.FieldValues.Key = //Column as Internal Name
It.FieldValues.Value = //Value
我需要:
It.FieldValues.Key = //Column as Title
It.FieldValues.Value = //Value
提前谢谢你, 扬
答案 0 :(得分:0)
好的,我找到了一个解决方案,可以将sharepoint列表加载到具有field.Title作为列标题的DataTable。
请找到代码:
ON z.subscription_package_id = T.subscription_package_id
如果我循环所有列,它们的标题是正确的。但是列表的内容未正确存储。在列表列中,以000,001,008或0028等值存储在文本格式中。并且下面的代码读取例如008为45.在另一列中,输入名称,例如Schneider,Markus和我的程序返回24。
有人有想法,为什么?
编辑:发现错误,你无法看到。在连接字符串中,我有 RetrieveIds = Yes; 选项。这就是我的代码重复内容错误的原因。
答案 1 :(得分:0)
对于那些不了解“循环遍历”含义的人,可以使用以下代码:
angular.module('MyApp',['ngMaterial', 'ngMessages', 'material.svgAssetsCache'])
.controller('SwitchDemoCtrl', function($scope) {
$scope.data = {
state: true,
change: function() {
this.state = !this.state;
}
};
});
这将检查您的显示名称,但使用静态名称提取值。
干杯!
答案 2 :(得分:-1)
使用以下方式替换您的代码行,您将获得字段集合,您可以通过内部名称,静态名称和显示名称获取字段。
Microsoft.SharePoint.Client.ListItemCollection LIC = SPList.GetItems(cQuery).Fields;