0

注文と注文の詳細があるとしましょう。
ビューには注文フィールドが含まれ、詳細についてはTelerikグリッド
がセッションで注文の参照を常に維持します。

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;
}

ただし、シリアル番号の列を非表示にしたいのですが、非表示にすると、詳細に表示されなくなります。

4

2 に答える 2

0

列を非表示にしたいだけの場合は、これが役立つと思います。

AutoGenerateColumns="false"

これにより、グリッドビューが自動的に列を作成するのではなく、情報を表示する列を生成する必要があります。だから今、あなたは表示するためにこのようなことをする必要があります

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

編集:

シリアル番号が表示されていないときにアクセスするには、DataKeysを使用する必要があります。

orderDetail.DataKeyNames = new string[] { "Serial" };
于 2010-09-01T13:39:39.993 に答える
0

私がしたことは
、Serialという列を追加して
、列幅を0に設定したことです。

columns.Bound(m => m.Serial).Title("").Sortable(false).Width(0);

(挿入、更新)で表示されますが、削除の問題は、(ブレットが言ったように)彼をデータキーにすることです。

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;
} 
于 2010-09-02T13:14:02.773 に答える