I'm trying to use RadGrid inside RadMultiPage and noticed the problem with selecting grid rows on the client side.
Sometimes the get_selectedItems() method returns the array with valid number of items, but the items are undefined.
Please see the attached code.
Test scenario:
1. Start application, Data1 tab is activated.
2. Click checkbox inside GridClientSelectColumn header to select all rows.
3. Click [Test selected rows] button.
---> Problem: returned items are empty. Close the message box.
4. Click the row with ID=5 to select only this row.
5. Click [Test selected rows] button.
---> Works fine. Close the message box.
6: Click checkbox inside GridClientSelectColumn header to select all rows.
7. Click [Test selected rows] button.
---> Works fine. Close the message box.
8. Click the row with ID=5 to select only this row.
6. Click tab [Data2] to change tab.
7. Click tab [Data1] to return to first tab. Row with ID=5 is selected.
8. Click [Test selected rows] button.
---> Problem: returned item is empty. Close the message box.
Code:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication4.Default" %>
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
<
head
runat
=
"server"
>
<
title
></
title
>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
telerik:RadScriptBlock
ID
=
"radScriptBlock"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
function radTabStrip_TabSelecting(sender, args)
{
var tab = args.get_tab();
var multiPage = $find(sender.get_multiPageID());
var pageView = multiPage.findPageViewByID(tab.get_pageViewID());
if(pageView.get_element())
tab.set_postBack(false);
}
function btnTestSelectedItems1_Clicked(sender, args)
{
TestSelectedItems('<%= grdData1.ClientID %>');
}
function btnTestSelectedItems2_Clicked(sender, args)
{
TestSelectedItems('<%= grdData2.ClientID %>');
}
function btnTestSelectedItems3_Clicked(sender, args)
{
TestSelectedItems('<%= grdData3.ClientID %>');
}
function TestSelectedItems(grd)
{
var items = $find(grd).get_selectedItems();
var msg = "Number of selected items: " + items.length + "\n\n";
for(var i = 0; i <
items.length
; i++)
{
msg += "Item" + i + ": ";
var
item
=
items
[i];
if(item)
msg += "
ID
=
" + item.getDataKeyValue("
ID");
else
msg += "null";
msg += "\n"
}
alert(msg);
}
</script>
</
telerik:RadScriptBlock
>
<
telerik:RadScriptManager
ID
=
"radScriptManager"
runat
=
"server"
/>
<
telerik:RadAjaxLoadingPanel
ID
=
"radLoadingPanel"
runat
=
"server"
/>
<
telerik:RadTabStrip
ID
=
"radTabStrip"
runat
=
"server"
MultiPageID
=
"radMultiPage"
SelectedIndex
=
"0"
OnClientTabSelecting
=
"radTabStrip_TabSelecting"
OnTabClick
=
"radTabStrip_TabClick"
>
<
Tabs
>
<
telerik:RadTab
Text
=
"Data1"
PageViewID
=
"pagData1"
>
</
telerik:RadTab
>
<
telerik:RadTab
Text
=
"Data2"
PageViewID
=
"pagData2"
>
</
telerik:RadTab
>
<
telerik:RadTab
Text
=
"Data3"
PageViewID
=
"pagData3"
>
</
telerik:RadTab
>
</
Tabs
>
</
telerik:RadTabStrip
>
<
telerik:RadMultiPage
ID
=
"radMultiPage"
runat
=
"server"
SelectedIndex
=
"0"
>
<
telerik:RadPageView
ID
=
"pagData1"
runat
=
"server"
Visible
=
"false"
>
<
telerik:RadGrid
runat
=
"server"
ID
=
"grdData1"
AllowPaging
=
"True"
AllowSorting
=
"True"
AllowMultiRowSelection
=
"True"
ClientSettings-EnableRowHoverStyle
=
"true"
OnNeedDataSource
=
"grdData_NeedDataSource"
>
<
MasterTableView
ClientDataKeyNames
=
"ID"
>
<
Columns
>
<
telerik:GridClientSelectColumn
/>
</
Columns
>
</
MasterTableView
>
<
ClientSettings
EnableRowHoverStyle
=
"true"
Selecting-AllowRowSelect
=
"true"
/>
</
telerik:RadGrid
>
<
telerik:RadButton
ID
=
"btnTestSelectedItems1"
runat
=
"server"
Text
=
"Test selected rows"
AutoPostBack
=
"false"
OnClientClicked
=
"btnTestSelectedItems1_Clicked"
/>
</
telerik:RadPageView
>
<
telerik:RadPageView
ID
=
"pagData2"
runat
=
"server"
Visible
=
"false"
>
<
telerik:RadGrid
runat
=
"server"
ID
=
"grdData2"
AllowPaging
=
"True"
AllowSorting
=
"True"
AllowMultiRowSelection
=
"True"
ClientSettings-EnableRowHoverStyle
=
"true"
OnNeedDataSource
=
"grdData_NeedDataSource"
>
<
MasterTableView
ClientDataKeyNames
=
"ID"
>
<
Columns
>
<
telerik:GridClientSelectColumn
/>
</
Columns
>
</
MasterTableView
>
<
ClientSettings
EnableRowHoverStyle
=
"true"
Selecting-AllowRowSelect
=
"true"
/>
</
telerik:RadGrid
>
<
telerik:RadButton
ID
=
"btnTestSelectedItems2"
runat
=
"server"
Text
=
"Test selected rows"
AutoPostBack
=
"false"
OnClientClicked
=
"btnTestSelectedItems2_Clicked"
/>
</
telerik:RadPageView
>
<
telerik:RadPageView
ID
=
"pagData3"
runat
=
"server"
Visible
=
"false"
>
<
telerik:RadGrid
runat
=
"server"
ID
=
"grdData3"
AllowPaging
=
"True"
AllowSorting
=
"True"
AllowMultiRowSelection
=
"True"
ClientSettings-EnableRowHoverStyle
=
"true"
OnNeedDataSource
=
"grdData_NeedDataSource"
>
<
MasterTableView
ClientDataKeyNames
=
"ID"
>
<
Columns
>
<
telerik:GridClientSelectColumn
/>
</
Columns
>
</
MasterTableView
>
<
ClientSettings
EnableRowHoverStyle
=
"true"
Selecting-AllowRowSelect
=
"true"
/>
</
telerik:RadGrid
>
<
telerik:RadButton
ID
=
"btnTestSelectedItems3"
runat
=
"server"
Text
=
"Test selected rows"
AutoPostBack
=
"false"
OnClientClicked
=
"btnTestSelectedItems3_Clicked"
/>
</
telerik:RadPageView
>
</
telerik:RadMultiPage
>
<
telerik:RadAjaxManager
runat
=
"server"
ID
=
"radAjaxManager"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"radTabStrip"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"radTabStrip"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"radMultiPage"
LoadingPanelID
=
"radLoadingPanel"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
</
form
>
</
body
>
</
html
>
using System;
using System.Data;
using System.Web.UI;
using Telerik.Web.UI;
namespace WebApplication4
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!this.IsPostBack)
this.pagData1.Visible = true;
}
protected void radTabStrip_TabClick(object sender, Telerik.Web.UI.RadTabStripEventArgs e)
{
e.Tab.PageView.Visible = true;
e.Tab.PageView.Selected = true;
foreach(Control control in e.Tab.PageView.Controls)
if(control is RadGrid)
((RadGrid)control).Rebind();
}
protected void grdData_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
((RadGrid)sender).DataSource = this.GetDataTable();
}
protected DataTable GetDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Day", typeof(string));
dt.Columns.Add("Date", typeof(DateTime));
Random r = new Random();
for(int i = 0; i < 100; i++)
{
DateTime dateTime = DateTime.Now.AddSeconds(-r.Next((int)TimeSpan.FromDays(365).TotalSeconds));
dt.Rows.Add(i + 1, dateTime.DayOfWeek.ToString(), dateTime);
}
return dt;
}
}
}