【发布时间】:2011-04-15 05:06:48
【问题描述】:
我在 IE 8 上使用 Silverlight 4。我为 SharePoint 2010 创建了一个新的 Silverlight Web 部件,用于读取 2 种外部内容类型。一个代表来自 Code Plex 的 Chinook 数据库中的发票,另一个代表每张发票的行。我正在尝试使用 Telerik Rad GridView 控件在主从布局中显示代码。我已经以几种不同的方式尝试了这段代码。以下是一般描述: 我有 2 个对象 InvoiceHeader 和 InvoiceLine。
Invoice 标题包含 InvoiceLines 列表
public List<InvoiceLine> lines { get; set; }
我能够让它“工作”的唯一方法是使用 foreach 并循环浏览返回的发票,然后使用子 foreach(var invoice in returnedInvoices) 并将每一行添加到列表中,然后将列表添加到当前发票使用invoice.lines.Add(new InvoiceLine(line));
当然,问题是我无法使用lines.Clear() 清除行,或者在所有 InvoiceHeader 对象中清除了所有行。由于我无法清除清单,因此每张发票都将以下发票行添加到自己的行中。因此,我创建了一个 InvoiceHeaders 跟踪数组并尝试使用它来执行tracking[x].lines.Add(new InvoiceLine(line));,然后我在这篇文章的主题中收到了错误。尝试将 InvoiceLine 添加到 InvoiceHeader 对象的列表时,对象引用未设置为对象的实例。我不是真正的开发人员,所以我很感激你能给我的任何帮助。目前代码已经变得疯狂,所以对此我深表歉意。我在下面包含了successedCallback:
void succeededCallback(object sender, ClientRequestSucceededEventArgs e)
{
this.Dispatcher.BeginInvoke(() =>
{
invoices.Clear();
invoiceLines.Clear();
int x = 0;
int y = 0;
foreach (var inv in returnedInvoices)
{
x++;
}
InvoiceHeader[] tracker = new InvoiceHeader[x];
foreach (var invoice in returnedInvoices)
{
tracker[y] = new InvoiceHeader(invoice);
//Get the lines that correspond to this invoice.
foreach (var line in returnedLines)
{
if(line.FieldValues["InvoiceId"].ToString() == invoice.FieldValues["InvoiceId"].ToString())
{
//tracker[y].lines.Add(new InvoiceLine(line));
/*
* If I comment out the line above
* I do not get the error, but I also
* don't get my detail level.
*/
}
}
invoices.Add(tracker[y]);
if (y < x) { y++; }
}
radGridView1234.ItemsSource = invoices;
}
);
}
【问题讨论】:
标签: c# silverlight sharepoint-2010 web-parts