Скрыть столбец в Telerik Grid, но его нужно получить
-
26-09-2019 - |
Вопрос
допустим, у меня есть заказ и детали заказа.
представление будет содержать поля заказа и сетку 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;
}
но я хочу, чтобы столбец серийного номера был невидимым, но если я это сделаю, он не будет представлен во входящих деталях.
Решение 2
что я сделал:
добавлен столбец под названием 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;
}
Другие советы
Если вы просто хотите сделать столбец невидимой, я думаю, что это должно помочь:
AutoGenerateColumns="false"
Это заставит вас генерировать столбцы, отображающие информацию, а не GridView автоматически создавать их для вас. Итак, теперь вам нужно будет что-то подобное, чтобы сделать заказ для отображения
<asp:TemplateField>
<ItemTemplate>
<b><%# DataBinder.Eval(Container.DataItem, "Order") %>:</b>
</ItemTemplate>
</asp:TemplateField>
РЕДАКТИРОВАТЬ:
Чтобы получить доступ к серийному номеру, когда он не виден, вам нужно будет использовать datakeeys:
orderDetail.DataKeyNames = new string[] { "Serial" };