我有一个GridView数据源,它是会话中List的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!
我有点卡住而且不确定如何做到这一点,任何帮助或建议都会非常感激。
答案 0 :(得分:0)
您必须使用invoiceid在会话中找到该对象,并更新通过网格更新的属性。
答案 1 :(得分:0)
不要在查询中创建新对象(匿名类型),而是绑定到实际对象。
List<Invoice> returnInvoices = (List<Invoice>)Session["Invoices"];
var partInvoices = returnInvoices
.Where(invoice => invoice.PartNo == partNo)
.ToList();
GridView3.DataSource = partInvoices;
GridView3.DataBind();
如果出于某些原因这是不可能的,那么事情就会开始变得有点混乱。您可以在字典中的LINQ查询中存储实际对象和对象之间的映射,但最好的解决方案实际上取决于您的需求。