Скрыть столбец в Telerik Grid, но нужно его получить - PullRequest
0 голосов
/ 01 сентября 2010

скажем, у меня есть заказ и детали заказа.
представление будет содержать поля заказа и 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;
}

но я хочу, чтобы столбец с серийным номером был невидимым, но если я это сделаю, он не будет представлен в деталях.

Ответы [ 2 ]

0 голосов
/ 02 сентября 2010

что я сделал это:
добавлен столбец с именем 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;
} 
0 голосов
/ 01 сентября 2010

Если вы просто хотите сделать столбец невидимым, я думаю, это должно помочь:

AutoGenerateColumns="false"

Это заставит вас создавать столбцы, отображающие информацию, а не в виде сетки, автоматически создающей их для вас. Так что теперь вам нужно будет сделать что-то подобное, чтобы получить ордер на отображение

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

EDIT:

Чтобы получить доступ к серийному номеру, когда он не виден, вам нужно использовать DataKeys:

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