Как программно найти и развернуть конкретную строку в Telerik RadGrid?
Как можно выполнить следующее требование?
На основе значений в queryString запрошенная запись должна быть расширена в свой DetailView.
1 ответ
В этом примере для доступа к данным используется Entity Framework 6. Это означает, что pageSize, pageIndex и данные сортировки RadGrid должны сохраняться в вызове, который EF выполняет с базой данных.
Давайте предположим следующий URL, когда вы попадете на страницу, содержащую RadGrid.
http://localhost:61878/search?pageindex=8&orderid=2871517&pagesize=50
Декларативная разметка RadGrid будет выглядеть следующим образом.
<telerik:RadGrid ID="OrdersMasterGrid" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" OnNeedDataSource="GridOnNeedDataSource" OnPreRender="GridPreRender">
Тогда
PageLoad
будет выглядеть так Это стреляет ДО РадгридOnNeedDataSource
событие, поэтому важно установить правильный индекс страницы и размер страницы, потому что эта информация будет поступать в базу данных.protected void Page_Load(object sender, EventArgs e) { if (IsPostBack == false) { OrderID_QueryString = Request.QueryString.GetValue<string>("orderid"); OrdersMasterGrid.MasterTableView.CurrentPageIndex = Request.QueryString.GetValue<int>("pageindex"); OrdersMasterGrid.MasterTableView.PageSize = Request.QueryString.GetValue<int>("pagesize"); }
Программное расширение правильного ряда происходит во время
OnPreRender
событие.GridPreRender
EventHandler будет выглядеть так:protected void GridPreRender(object sender, EventArgs e) { foreach (object gridDataItem in OrdersMasterGrid.MasterTableView.Items) { if (gridDataItem is GridDataItem) { GridDataItem gdi = gridDataItem as GridDataItem; if (gdi["OrderID"].Text == OrderID_QueryString) { gdi.Expanded = true; break; } } } }
Вывод: хотя в этом примере используется queryString, может быть лучше использовать ViewData, ViewBag или другие прозрачные механизмы. Подводный камень этого подхода заключается в том, что если пользователь решит добавить в закладки страницу, он, в конечном счете, перестанет работать, если запрошенная ордера отсутствует в данных, возвращаемых EF6 для 8-й страницы, когда размер страницы равен 50.