【问题标题】:Loading Sharepoint Web Services XML List into WPF DataGrid将 Sharepoint Web 服务 XML 列表加载到 WPF DataGrid 中
【发布时间】:2015-01-04 04:06:57
【问题描述】:

我正在尝试使用从 Sharepoint Web 服务返回的列表填充我的 DataGrid,我发现的所有教程/指南都使用 XAML 文件来执行此操作。

这是我用来提取 XML 的代码,

private String GetListNode()
    {
        webService.Lists siteClient = new webService.Lists();
        System.Net.NetworkCredential passCredentials = new System.Net.NetworkCredential("username", "password", "domain");
        siteClient.Credentials = passCredentials;

        XmlNode getNode = siteClient.GetListItems("Tasks", string.Empty, null, null, string.Empty, null, null);

        return getNode.OuterXml;
    }

这会返回页面 XML,在这个页面中我想抓取这些项目,

ows_ID, ows_Client, ows_AssignedTo, ows_LinkTitle, ows_Status, ows_Priority, ows_DueDate

我想为 DataGrid 制作这些项目的列,然后填充数据。我们将不胜感激所有帮助,在此先感谢您。

这不是完整的 XML,这是一小部分,

<listitems
xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:rs="urn:schemas-microsoft-com:rowset"
xmlns:z="#RowsetSchema"
xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<rs:data ItemCount="691">
    <z:row ows_Attachments="0" ows_ID="2108" ows_Task_x0020_Type="Issue" ows_Client="City University of New York" >
     />
</rs:data>

【问题讨论】:

  • 你能提供xml吗?
  • @TomerKlein 我已将部分 XML 添加到我的帖子中
  • 在这里,看看这个:stackoverflow.com/questions/6757795/… 它也适用于您的 xml!
  • @TomerKlein 你能解释一下在我目前的情况下如何使用这个例子吗?那个使用 XML 文件“fullPathToYourXmlFile.xml”,而另一方面,我正在从 Web 服务中检索。
  • 你可以这样使用它:XmlReader xmlFile = XmlReader.Create("whatever.com/xml...");

标签: c# xml wpf sharepoint datagrid


【解决方案1】:

您可以考虑以下方法:

/// <summary>
/// Bind SP Data Source 
/// </summary>
private void BindSPDataSource()
{
    var data = GetListItems("Tasks");
    var result = XElement.Parse(data.OuterXml);
    XNamespace z = "#RowsetSchema";
    var taskItems = from r in result.Descendants(z + "row") select new
            {
                TaskName = r.Attribute("ows_LinkTitle").Value,
                DueDate = r.Attribute("ows_DueDate") != null ? r.Attribute("ows_DueDate").Value : string.Empty,
                AssignedTo = r.Attribute("ows_AssignedTo") != null ? r.Attribute("ows_AssignedTo").Value : string.Empty,
            };
    dgTasks.ItemsSource = taskItems; 
}

在哪里

private XmlNode GetListItems(string listTitle)
{
    var client = new Lists.Lists();
    client.Url = webUri + "/_vti_bin/Lists.asmx";
    return client.GetListItems(listTitle, string.Empty, null, null, string.Empty, null, null);
}

XAML

<DataGrid  Name="dgTasks"  HorizontalAlignment="Stretch" VerticalAlignment="Stretch" AutoGenerateColumns="False" >
     <DataGrid.Columns>
         <DataGridTextColumn Header="Task Name" Binding="{Binding TaskName}" />
         <DataGridTextColumn Header="Due Date" Binding="{Binding DueDate}"/>
         <DataGridTextColumn Header="Assigned To" Binding="{Binding AssignedTo}"/>
     </DataGrid.Columns>
 </DataGrid>

结果

【讨论】:

  • 我有一个异常说“找不到类型或命名空间名称'列表'(您是否缺少 using 指令或程序集引用?)”
  • 它是一个生成的代理命名空间,你应该根据你的例子用webService替换Lists
  • 我有一个小问题,似乎是重复列任务名称、截止日期和分配给?关于为什么的任何想法?
  • 在我的示例中,属性 AutoGenerateColumns 设置为“False”以避免列自动生成
  • 我有一个关于同一组代码的简短问题,我将如何实现类似 string strName = strName.Substring(strName.IndexOf("#") + 1);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多