SharePoint list.items.GetDataTable列名称与字段名称不匹配

SharePoint list.items.GetDataTable列名称与字段名称不匹配

问题描述:

我将SPGridView绑定到SPList。如代码示例所示,我使用以下代码基于列表创建数据视图。SharePoint list.items.GetDataTable列名称与字段名称不匹配

dim data as DataView = myList.Items.GetDataTable.DefaultView 
grid.DataSource = data 
etc... 

什么我发现是,在导致数据视图的列名并不总是与在SPList定义的源字段。比如我有列名为

  • 说明
  • ReportItem
  • ReportStatus

    这些显示在其列名称所产生的数据视图像

  • ReportType0
  • ReportStatus1

这使我认为我有重复的字段名称定义,但似乎并非如此。

好像我缺少一些基本的东西在这里? 谢谢。

GetDataTable方法返回internalName(或staticName - 我不记得肯定它,但他们往往是相同的)列的表现形式,而不是Title表示,这是你在Web见接口。我相信GetDataTable会在封面下做一个CAML查询,并且您必须使用那个internalName作为CAML中的字段引用。

blog更详细地谈论它。

因此,我在我的博客上发布了这个消息,但我写了一个可用的小实用方法,在获取数据表后,它基本上将DataTable中的列名重新映射为其友好名称。

DataTable table = list.GetItems(list.DefaultView).GetDataTable(); 
foreach(DataColumn column in table.Columns) 
{ 
    column.ColumnName = list.Fields.GetFieldByInternalName(column.ColumnName).Title; 
} 

希望帮助!

你也可以做什么(如果你使用的是.NET 3.5)是使用匿名类型并绑定它。如果你这样做,你也可以使用Linq DataSource。 我发表了一篇文章,解释了这个here