如何以编程方式查找和扩展Telerik RadGrid中的特定行?

时间:2015-03-03 16:40:47

标签: c# telerik radgrid

如何达到以下要求?

根据queryString中的值,必须将请求的记录扩展到其DetailView中。

1 个答案:

答案 0 :(得分:0)

此示例使用Entity Framework 6访问数据。这意味着RadGrid的pageSize,pageIndex和排序信息必须在EF对数据库的调用中保持不变。

当您到达包含RadGrid的页面时,我们假设以下URL。

    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看起来像这样。这会在RadGrid的OnNeedDataSource事件之前触发,因此设置正确的pageindex和pagesize非常重要,因为该信息将一直流向数据库。

    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;
                }
            }
        }
    }
    
  4. 结论:虽然此示例使用queryString,但最好使用ViewData,ViewBag或其他透明机制。这种方法的缺陷在于,如果用户决定为页面添加书签,当页面大小为50时,当EF6为第8页返回的数据中不存在请求的orderid时,它将最终停止工作。