2010-09-01 59 views
0

比方說,我有一個訂單和訂單的詳細信息。
該視圖將包含訂單字段,以及Telerik網格的詳細信息
我始終在會話中維護訂單的參考。隱藏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; 
} 

問題可以通過添加序號列來解決,並進入細節,在我的參考已有上,通過重寫平等比較:

public overrid Equal(object obj){ 
return (obj as OrderDetail).Serial == this.Serial; 
} 

,但我想要的序列號列是不可見的,但是如果我這樣做,它將不會呈現在包含的細節中。

回答

0

我所做的是:
增加了一個名爲串行列
做出的列寬設置爲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; 
} 
0

如果你只是想使列看不見的,我認爲這應該幫助:

AutoGenerateColumns="false" 

這將迫使你自動生成顯示信息,而不是在GridView爲您創造他們的列。所以,現在你需要做這樣的事情來獲得訂單顯示

<asp:TemplateField> 
     <ItemTemplate> 
      <b><%# DataBinder.Eval(Container.DataItem, "Order") %>:</b> 
     </ItemTemplate> 
</asp:TemplateField> 

編輯:

訪問時,它是不可見的序列號,您將需要使用DataKeys:

orderDetail.DataKeyNames = new string[] { "Serial" }; 
+0

是否可以在asp.net mvc中使用? 並且據我所知,Telerik Grid有能力爲每一列定義一個模板。 順便說一下,我正在使用Ajax綁定,並且AutoGenerateColumns爲false。 – 2010-09-02 02:28:35

+0

@Nou Sabouny - 我其實不太熟悉MVC,但我確實使用Telerik Grid。我在考慮將AutoGenerateColumns =「false」設置爲可以解決您看不到串行列的問題(但也許會導致您無法找到它)。要解決此問題,您需要使用DataKeys,將「serial」設置爲數據鍵,即使沒有顯示,也可以訪問。讓我知道這是否有幫助 – Brett 2010-09-02 12:12:36