我正在尝试使用SharePoint列表中的数据填充WPF数据网格。
我使用以下内容检索列表信息:
private void buttonRefreshOrders_Click(object sender, RoutedEventArgs e)
{
using (var ctx = new ClientContext("http://sharepoint"))
{
var list = ctx.Web.Lists.GetByTitle("Resource Orders");
CamlQuery query = new CamlQuery
{
ViewXml =
@"<Where><Or><Eq><FieldRef Name=""Status""></FieldRef><Value Type=""Text"">Approved</Value></Eq><IsNotNull><FieldRef Name=""Status"" /></FieldRef></IsNotNull></Or></Where>"
};
var collListItem = list.GetItems(query);
ctx.Load(
collListItem,
items => items.Include(
item => item.Id,
item => item.DisplayName,
item => item.HasUniqueRoleAssignments,
item => item["Persona"]));
ctx.ExecuteQuery();
if (collListItem.Count == 0)
{
MessageBox.Show(
"No resource orders are currently within the queue.",
"Information Center",
MessageBoxButton.OK,
MessageBoxImage.Information);
}
else
{
MessageBox.Show("Success!");
foreach (var item in collListItem)
{
CustomersCollection.Add(new Customers { Persona = item["Persona"].ToString() });
}
dataGridOutstandingOrders.ItemsSource = CustomersCollection;
}
}
}
我使用以下方法创建了一个可观察的集合:
public ObservableCollection<Customers> CustomersCollection { get; set; }
我的Customers类看起来像这样:
public class Customers
{
/// <summary>
/// Gets or sets the persona.
/// </summary>
public string Persona { get; set; }
}
我在以下一行收到System.NullReferenceException
:
CustomersCollection.Add(new Customers { Persona = item["Persona"].ToString() });
我预计的是我的客户课程没有正确初始化,但我不完全确定如何解决这个问题或研究什么。这里遗失的是什么?
答案 0 :(得分:1)
这里最可能的问题是item [“Persona”]为空。
您的客户代码看起来很好。
编辑:Opps,你没有初始化你的收藏。因此,当您调用它时,您试图将客户置于空值。
您需要实例化ObservableCollection
的实例所以你已经将它声明为let假设Class xyz的属性。因此,您需要在上面的代码中使用它,如下所示
xyz stuff = new xyz();
stuff.CustomersCollection = new ObservableCollection<Customers>();
stuff.CustomersCollection.add(new customer("blah"));
或者,在xyz的create方法中声明初始化,以便在对象创建时实现集合的新实例。