我将SPGridView绑定到SPList。正如代码示例所示,我使用以下代码基于列表创建数据视图。
dim data as DataView = myList.Items.GetDataTable.DefaultView
grid.DataSource = data
etc...
我发现结果数据视图中的列名并不总是与SPList中定义的源字段匹配。例如,我有名为
的列ReportStatus
这些显示在结果数据视图中,列名如
这让我认为我定义了重复的字段名称,但似乎并非如此。
好像我在这里缺少一些基本的东西? 感谢。
答案 0 :(得分:4)
GetDataTable
方法返回internalName
(或staticName
- 我不记得确定哪些但它们经常是相同的)列的表示,而不是Title
表示,这是您在Web界面中看到的。我相信GetDataTable
会在封面下进行CAML查询,您必须使用internalName
来进行CAML中的字段引用。
这个blog更详细地讨论了它。
答案 1 :(得分:4)
所以我在我的博客上发布了这个,但是我写了一个你可以使用的实用工具方法,在你获得数据表之后,它基本上将DataTable中的列名重新映射为友好名称。
DataTable table = list.GetItems(list.DefaultView).GetDataTable();
foreach(DataColumn column in table.Columns)
{
column.ColumnName = list.Fields.GetFieldByInternalName(column.ColumnName).Title;
}
希望有所帮助!
答案 2 :(得分:0)
你还能做什么(如果你使用的是.NET 3.5)是使用匿名类型并绑定它。如果您这样做,您可能也想使用Linq DataSource。 我发了一篇文章解释了这个here。