如何达到以下要求?
根据queryString中的值,必须将请求的记录扩展到其DetailView中。
答案 0 :(得分:0)
此示例使用Entity Framework 6访问数据。这意味着RadGrid的pageSize,pageIndex和排序信息必须在EF对数据库的调用中保持不变。
当您到达包含RadGrid的页面时,我们假设以下URL。
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
看起来像这样。这会在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");
}
在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或其他透明机制。这种方法的缺陷在于,如果用户决定为页面添加书签,当页面大小为50时,当EF6为第8页返回的数据中不存在请求的orderid时,它将最终停止工作。