如何以编程方式查找和扩展 Telerik RadGrid 中的特定行?
How can I programatically find and expand a particular row in a Telerik RadGrid?
如何实现以下要求?
根据 queryString 中的值,请求的记录必须展开到其 DetailView 中。
此示例使用 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
事件处理程序如下所示:
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 时,当请求的 orderid 不存在于 EF6 为第 8 页返回的数据中时,它最终将停止工作。
如何实现以下要求?
根据 queryString 中的值,请求的记录必须展开到其 DetailView 中。
此示例使用 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
事件处理程序如下所示: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 时,当请求的 orderid 不存在于 EF6 为第 8 页返回的数据中时,它最终将停止工作。