假设我有订单和订单详情 视图将包含订单字段,Telerik Grid包含详细信息 我总是在会议中保留订单的参考。
Session["Order"] = order;
当用户向网格添加订单明细时,我将其保存在订单参考中。
public ActionResult Grid_AddDetail(OrderDetail orderDetail) {
(Session["order"] as Order).Details.Add(orderDetail);
}
问题是当我需要更新行时,我该如何确定哪个细节 订单明细已更新?
public ActionResult Grid_UpdateDetail(OrderDetail orderDetail) {
///how will i compare the element in the details, with the orderDetail?
(Session["order"] as Order).Details.IndexOf(orderDetail) = orderDetail;
}
问题可以通过添加序列号列来解决,并通过覆盖Equal来比较传入的详细信息和我的参考中存在的内容:
public overrid Equal(object obj){
return (obj as OrderDetail).Serial == this.Serial;
}
但我希望序列号列不可见,但如果我这样做,它将不会以详细信息显示。
答案 0 :(得分:0)
如果您只想让列不可见,我认为这应该会有所帮助:
AutoGenerateColumns="false"
这会强制您生成显示信息的列,而不是gridview为您自动创建它们。所以现在你需要做这样的事情才能让订单显示
<asp:TemplateField>
<ItemTemplate>
<b><%# DataBinder.Eval(Container.DataItem, "Order") %>:</b>
</ItemTemplate>
</asp:TemplateField>
编辑:
要在序列号不可见时访问序列号,您需要使用DataKeys:
orderDetail.DataKeyNames = new string[] { "Serial" };
答案 1 :(得分:0)
我所做的是:
添加了一个名为Serial
的列
将列宽设置为0。
columns.Bound(m => m.Serial).Title("").Sortable(false).Width(0);
它将在(插入,更新)中呈现 但删除中的问题是让他(如Brett所说)作为Datakey。
public ActionResult Grid_AddDetail(OrderDetail orderDetail) {
if ((Session["order"] as Order).Details.Count != 0)
item.Serial= (Session["order"] as Order).Details.Max(d => d.Serial) + 1;
(Session["order"] as Order).Details.Add(orderDetail);
}
public ActionResult Grid_UpdateDetail(OrderDetail orderDetail) {
///order detail now contains the serial number.
(Session["order"] as Order).Details.IndexOf(orderDetail) = orderDetail;
}