SharePoint List =>带有标题名称的DataTable

时间:2017-05-15 12:37:27

标签: c# sharepoint sharepoint-2010 keyvaluepair

我正在访问这样的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

提前谢谢你, 扬

3 个答案:

答案 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;