0

我有一个 GridView 数据源,它是对会话中列表的 linq 查询。

List<Invoice> returnInvoices = (List<Invoice>)Session["Invoices"];

    var partInvoices = from i in returnInvoices
                       where i.PartNo == partNo
                       select new
                       {
                           i.InvoiceID,
                           i.InvoiceNo,
                           i.InvoiceLine,
                           i.InvoiceDate,
                           i.OrderNo,
                           i.OrderLine,
                           i.OrderRel,
                           i.OrderLineItem,
                           i.OrderLineQty,
                           i.CustomerPO,
                           i.Serialized
                       };

    GridView3.DataSource = partInvoices;
    GridView3.DataBind();

当我从 GridView 中选择一行时,我需要更新原始会话列表中的相关对象,其中包含的对象比 GridView 更多。(即,所有部分的发票,而不仅仅是 linq 查询中的部分)

我的问题是,如何将 GridView 中的选定对象与原始列表相关联?我想使用 GridView.SelectedIndex 但这不起作用,因为 GridView 上的 0 很可能是原始列表上的 382!

我有点卡住了,不知道该怎么做,任何帮助或建议将不胜感激。

4

2 回答 2

0

您必须使用 invoiceid 在会话中找到对象并更新通过网格更新的属性。

于 2012-12-13T14:57:30.467 回答
0

只是不要在查询中创建新对象(匿名类型),而是绑定到实际对象。

List<Invoice> returnInvoices = (List<Invoice>)Session["Invoices"];

var partInvoices = returnInvoices
                       .Where(invoice => invoice.PartNo == partNo)
                       .ToList();

GridView3.DataSource = partInvoices;
GridView3.DataBind();

如果由于某些原因无法做到这一点,事情就会开始变得有点混乱。您可以将实际对象和在 LINQ 查询中创建的对象之间的映射存储在字典或类似的东西中,但最佳解决方案实际上取决于您的需求。

于 2012-12-13T14:57:46.330 回答