我使用CAML通过Web服务查询SharePoint列表并输出到C#/ ASP.Net中的GridView。我遇到的问题是显示的列比我在查询的“ViewFields”部分中指定的列多(例如,如下所示)。
viewFields.InnerXml = "<ViewFields>" +
"<FieldRef Name="Col1" />" +
"<FieldRef Name="Col2" />" +
"<FieldRef Name="Col3" />" +
"<FieldRef Name="Col4" />" +
"</ViewFields>";
我在'QueryOptions'中尝试设置为false。
任何人都可以提供此问题的任何解决方案,以便只返回指定的列吗?
答案 0 :(得分:0)
这是为了帮助那些正在寻找这个问题答案的人,我们发现最有效的解决方案:
我们从这里获取了节点的想法:How to Return Only Certain Columns of a List When using the SharePoint Web Service?
然后我们完成了将我们想要的字段提取到数据表中的过程。首先,我们为字段创建适当数量的列。然后遍历子节点以提取所有行数据。对我们请求的每个字段执行此操作。
var myData = new DataTable();
foreach (string field in fields)
{
myData.Columns.Add(field);
}
foreach (XmlNode node in nodeListItems)
{
// rs = RowSet
if (node.Name == "rs:data")
{
for (int i = 0; i < node.ChildNodes.Count; i++)
{
if (node.ChildNodes[i].Name == "z:row")
{
DataRow row = myData.NewRow();
foreach (string field in fields)
{
var xmlAttributeCollection = node.ChildNodes[i].Attributes;
if (xmlAttributeCollection != null)
row[field] = xmlAttributeCollection["ows_" + field].Value;
}
myData.Rows.Add(row);
}
}
}
}
return myData;