Как программно найти и развернуть конкретную строку в Telerik RadGrid?

Как можно выполнить следующее требование?

На основе значений в queryString запрошенная запись должна быть расширена в свой DetailView.

1 ответ

В этом примере для доступа к данным используется Entity Framework 6. Это означает, что pageSize, pageIndex и данные сортировки RadGrid должны сохраняться в вызове, который EF выполняет с базой данных.

Давайте предположим следующий URL, когда вы попадете на страницу, содержащую RadGrid.

    http://localhost:61878/search?pageindex=8&orderid=2871517&pagesize=50
  1. Декларативная разметка RadGrid будет выглядеть следующим образом.

    <telerik:RadGrid ID="OrdersMasterGrid" runat="server"
            AllowPaging="True"
            AllowSorting="True"
            AutoGenerateColumns="False"
            OnNeedDataSource="GridOnNeedDataSource"
            OnPreRender="GridPreRender">
    
  2. Тогда 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");
        }
    
  3. Программное расширение правильного ряда происходит во время 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.

Другие вопросы по тегам