Я использую шаблон telerik MVC и у меня есть база данных с огромным количеством столбцов, а у сетки telerik нет горизонтальной полосы прокрутки, поэтому я создал флажки для пользователя, чтобы выбрать, какие именно столбцы они хотят просмотреть.Это работает достаточно хорошо, поскольку, когда я впервые захожу на страницу, в верхней части отображаются флажки с кнопкой «Применить» и под сеткой.Поскольку из WebForm ничего не было отправлено, в виде сетки отображаются все столбцы.Перед добавлением файлов cookie пользователь должен был нажать «Применить» только один раз, чтобы появились только эти столбцы.Однако если пользователь затем попытается отсортировать или отфильтровать один из этих столбцов, он вернется к отображению всех столбцов.Итак, я создал cookie для хранения выбранной информации.К сожалению, это помогло только с выбором первого фильтра.Если используется второй фильтр, он снова покажет все столбцы, а не только выбранные.Кроме того, пользователь теперь должен дважды нажать «Применить», чтобы его выборки правильно отображались в виде сетки.Вот краткое объяснение того, как у меня все закодировано:
Индекс
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<% using (Html.BeginForm("Index", "Order"))
{ %>
<p>
<%= Html.CheckBox("osurr", true, "Ad Number")%>Ad Number //I set this and a few other columns to default to true
<%= Html.CheckBox("csurr", false, "Customer Number")%>Customer Number
<%= Html.CheckBox("rhosurr", false, "RHO Number")%>RHO Number
<%= Html.CheckBox("lockid", false, "Lock ID")%>Lock ID
//And several more
</p>
<input type="submit" value="Apply" />
<% } %>
<%
Html.Telerik().Grid(Model)
.Name("Grid")
.Columns(columns =>
{
columns.Template(o =>
{
%>
<%=Html.ActionLink("Detail", "Edit", new { id = o.osurr })%>
<%
}).Width(25);
if (Request.Cookies["DBCols"]["csurr"] != null)
{
if (Request.Cookies["DBCols"].Values["csurr"].Equals("True")) { columns.Bound(o => o.csurr).Title("Cust. No."); }
}
if (Request.Cookies["DBCols"]["rhosurr"] != null)
{
if (Request.Cookies["DBCols"].Values["rhosurr"].Equals("True")) { columns.Bound(o => o.rhosurr).Title("RHO No."); }
}
if (Request.Cookies["DBCols"]["lockid"] != null)
{
if (Request.Cookies["DBCols"].Values["lockid"].Equals("True")) { columns.Bound(o => o.lockid).Title("Lock ID"); }
}
//And again, several more.
})
.Groupable(grouping => grouping.Enabled(true))
.Resizable(resizing => resizing.Columns(true))
.Filterable(filter => filter.Enabled(true))
.Sortable(sorting => sorting.Enabled(true))
.Pageable(paging => paging.Enabled(true).PageSize(25))
.Render();
%>
</asp:Content>
Контроллер
public ActionResult Index(bool? csurr, bool? rhosurr, bool? lockid /* And Several More */)
{
ViewData["csurr"] = csurr ?? true;
ViewData["rhosurr"] = rhosurr ?? true;
ViewData["lockid"] = lockid ?? true;
if ((bool)ViewData["csurr"]) { DBCols.Values["csurr"] = (ViewData["csurr"].ToString());
}
else { DBCols.Values["csurr"] = "False"; }
if ((bool)ViewData["rhosurr"]) { DBCols.Values["rhosurr"] = (ViewData["rhosurr"].ToString()); }
else { DBCols.Values["rhosurr"] = "False"; }
if ((bool)ViewData["lockid"]) { DBCols.Values["lockid"] = (ViewData["lockid"].ToString()); }
else { DBCols.Values["lockid"] = "False"; }
//And Several more
var db = new MillieOrderDB();
var listView = from m in db.vw_cadords
orderby m.createstamp descending
select m;
return View(listView);
}
Сейчас я работаю только в Index ActionResult, чтобы держать вещи в одном месте, пока я выясняю, как заставить все это работать.У кого-нибудь есть идеи, почему мне приходится нажимать «Применить дважды», почему я не могу использовать более одного фильтра и как этого избежать?