Hi,
I have a rad grid with paging enabled. I would like to select multiple records using check boxes. The code is posted below. It doesn't work when items selected from more than one page. Any help would be appreciated.
protected void ButtonApprove_Click(object sender, EventArgs e)
{
var UniqueIds = new List<string>();
foreach (GridDataItem item in RadGrid1.MasterTableView.Items) // Loop through each items
{
CheckBox chkBox = (CheckBox)item.FindControl("CheckBoxStatus"); // Get the checkbox control
if (chkBox.Checked)
{
var UniqueId = item["UniqueId"].Text;
UniqueIds.Add(UniqueId);
}
}
foreach (var ss in UniqueIds)
{
var thisExpenseDetails = _repository.GetExpenseDetailsByUniqueID(ss);
thisExpenseDetails.Status = ExpensesClaimResource.StatusApproved;
_repository.SaveEntities();
}
RadGrid1.Rebind();
}
Thanks,
Anita
I have a rad grid with paging enabled. I would like to select multiple records using check boxes. The code is posted below. It doesn't work when items selected from more than one page. Any help would be appreciated.
protected void ButtonApprove_Click(object sender, EventArgs e)
{
var UniqueIds = new List<string>();
foreach (GridDataItem item in RadGrid1.MasterTableView.Items) // Loop through each items
{
CheckBox chkBox = (CheckBox)item.FindControl("CheckBoxStatus"); // Get the checkbox control
if (chkBox.Checked)
{
var UniqueId = item["UniqueId"].Text;
UniqueIds.Add(UniqueId);
}
}
foreach (var ss in UniqueIds)
{
var thisExpenseDetails = _repository.GetExpenseDetailsByUniqueID(ss);
thisExpenseDetails.Status = ExpensesClaimResource.StatusApproved;
_repository.SaveEntities();
}
RadGrid1.Rebind();
}
Thanks,
Anita
6 Answers, 1 is accepted
0

Princy
Top achievements
Rank 2
answered on 10 Aug 2011, 05:50 AM
Hello Anita,
RadGrid loses its current selection when the data is sorted, a new group or filter is added, or when the current page changes.Check the following help documentation which explains more about this.
Persisting the Selected Rows Server-side on Sorting/Paging/Filtering/Grouping.
Thanks,
Princy.
RadGrid loses its current selection when the data is sorted, a new group or filter is added, or when the current page changes.Check the following help documentation which explains more about this.
Persisting the Selected Rows Server-side on Sorting/Paging/Filtering/Grouping.
Thanks,
Princy.
0

Rakesh Gupta
Top achievements
Rank 2
answered on 10 Aug 2011, 06:39 AM
Hello Anita,
RadGrid will lost the selected items when user changes the PageIndex.
You cna use below code to remember the Selected Items on RadGrid PageIndex Change.
-- aspx :
--- aspx.cs :
--- Page Index Change :
--- User Defined Method to Remember Selected Items :
--- Access Selected Item Method:
--- Read Selected Items On ItemCommand :
-- Check Previsouly Selected Items on Page Index Change (Item DataBound):
Let me know for any concerns.
--
Thanks & Regards,
Rakesh T. Gupta
RadGrid will lost the selected items when user changes the PageIndex.
You cna use below code to remember the Selected Items on RadGrid PageIndex Change.
-- aspx :
<telerik:RadGrid ID=
"RadGrid1"
runat=
"server"
AutoGenerateColumns=
"False"
AllowMultiRowSelection=
"true"
AllowPaging=
"true"
AllowSorting=
"true"
AllowCustomPaging=
"true"
AllowMultiRowEdit=
"false"
OnNeedDataSource=
"RadGrid1_NeedDataSource"
EnableAjaxSkinRendering=
"true"
ShowStatusBar=
"false"
OnSortCommand=
"RadGrid1_SortCommand"
OnItemDataBound=
"RadGrid1_ItemDataBound"
OnItemCommand=
"RadGrid1_ItemCommand"
OnPageIndexChanged=
"RadGrid1_PageIndexChanged"
>
<PagerStyle Mode=
"NextPrevAndNumeric"
AlwaysVisible=
"true"
></PagerStyle>
<MasterTableView DataKeyNames=
"Id"
CommandItemDisplay=
"Top"
EnableNoRecordsTemplate=
"true"
TableLayout=
"Auto"
Width=
"100%"
ClientDataKeyNames=
"Id"
>
<Columns>
<telerik:GridTemplateColumn HeaderText=
"Id"
DataField=
"Id"
SortExpression=
"Id"
AllowFiltering=
"true"
UniqueName=
"Id"
Visible=
"true"
>
<HeaderStyle HorizontalAlign=
"Left"
/>
<ItemTemplate>
<asp:LinkButton runat=
"server"
ID=
"lnkJobItemId"
CommandArgument=
'<%# Eval("Id") %>'
CommandName=
"Edit"
Text=
'<%# Eval("Id") %>'
></asp:LinkButton>
</ItemTemplate>
<ItemStyle Wrap=
"True"
HorizontalAlign=
"Right"
/>
</telerik:GridTemplateColumn>
</Columns>
/*Any Other Code*/
</MasterTableView>
</telerik:RadGrid>
--- Page Index Change :
protected
void
RadGrid1_PageIndexChanged(
object
sender, GridPageChangedEventArgs e)
{
RememberSelected(RadGrid1);
}
--- User Defined Method to Remember Selected Items :
ArrayList selectedItems;
private
void
RememberSelected(RadGrid radGrid)
{
selectedItems =
new
ArrayList();
int
index = -1;
foreach
(GridDataItem item
in
radGrid.Items)
{
index = (
int
)item.GetDataKeyValue(
"Id"
);
bool
result = item.Selected;
// Check in the Session
if
(ViewState[
"Selected"
] !=
null
)
selectedItems = (ArrayList)ViewState[
"Selected"
];
if
(result)
{
if
(!selectedItems.Contains(index))
selectedItems.Add(index);
}
else
selectedItems.Remove(index);
}
if
(selectedItems !=
null
&& selectedItems.Count > 0)
ViewState[
"Selected"
] = selectedItems;
}
--- Access Selected Item Method:
private
string
GetSelectedItems()
{
string
IdList =
string
.Empty;
if
(ViewState[
"Selected"
] !=
null
)
{
selectedItems = (ArrayList)ViewState[
"Selected"
];
for
(
int
i = 0; i < selectedItems.Count; i++)
{
IdList = IdList + (IdList ==
string
.Empty ?
""
:
","
) + selectedItems[i];
}
ViewState[
"Selected"
] =
null
;
}
foreach
(GridItem item
in
RadGrid1.SelectedItems)
{
IdList = IdList + (IdList ==
string
.Empty ?
""
:
","
) + ((LinkButton)item.FindControl(
"lnkId"
)).Text;
}
return
IdList;
}
--- Read Selected Items On ItemCommand :
protected
void
RadGrid1_ItemCommand(
object
sender, GridCommandEventArgs e)
{
string
IdList =
string
.Empty;
switch
(e.CommandName)
{
case
"Delete"
:
try
{
IdList = GetSelectedItems();
if
(!
string
.IsNullOrEmpty(IdList ))
{
// Your Code Here
}
}
catch
(Exception ex)
{
throw
ex;
}
break
;
}
-- Check Previsouly Selected Items on Page Index Change (Item DataBound):
protected
void
RadGrid1_ItemDataBound(
object
sender, GridItemEventArgs e)
{
try
{
if
(selectedItems !=
null
)
{
if
(e.Item
is
GridDataItem)
{
GridDataItem row = (GridDataItem)e.Item;
int
index = (
int
)row.GetDataKeyValue(
"JobItemId"
);
if
(selectedItems.Contains(index))
{
e.Item.Selected =
true
;
}
}
}
}
catch
(Exception ex)
{
throw
ex;
}
Let me know for any concerns.
--
Thanks & Regards,
Rakesh T. Gupta
0

Anita
Top achievements
Rank 1
answered on 10 Aug 2011, 05:14 PM
Sorry, I couldn't get it to work.
The check box is in GridTemplateColumn.
A link (the first link in second post) in the following forum post seems releveant. But the link is broken!
The check box is in GridTemplateColumn.
A link (the first link in second post) in the following forum post seems releveant. But the link is broken!
http://www.telerik.com/community/forums/aspnet/general-discussions/how-to-keep-the-checkbox-state-while-change-the-page.aspx
Can you give me the correct url?
Thanks,
Anita
0

Anita
Top achievements
Rank 1
answered on 11 Aug 2011, 01:44 PM
Hi Telerik team,
This is my code. Can you please check what is missing here.
ASPX page
<telerik:GridTemplateColumn UniqueName="TemplateEditColumn" HeaderText="Select" AllowFiltering="false">
<ItemTemplate>
<asp:CheckBox ID="CheckBoxStatus" runat="server" AutoPostBack="true" OnCheckedChanged="CheckBoxStatus_CheckedChanged" />
</ItemTemplate>
</telerik:GridTemplateColumn>
onCheckedChanged
protected void CheckBoxStatus_CheckedChanged(object sender, EventArgs e)
{
CheckBox chkbox = (CheckBox) sender;
GridDataItem item = (GridDataItem) chkbox.NamingContainer;
string value = item["FirstName"].Text;
ArrayList selectedItems;
if (Session["selectedItems"] == null)
{
selectedItems = new ArrayList();
}
else
{
selectedItems = (ArrayList)Session["selectedItems"];
}
if (chkbox.Checked)
{
selectedItems.Add(value);
}
else
{
selectedItems.Remove(value);
}
Session["selectedItems"] = selectedItems;
}
PreRender
protected void RadGrid2_PreRender(object sender, EventArgs e)
{
if (Session["selectedItems"] != null)
{
ArrayList selectedItems = (ArrayList) Session["selectedItems"];
Int16 stackIndex;
for (stackIndex = 0; stackIndex <= selectedItems.Count - 1; stackIndex++)
{
string curItem = selectedItems[stackIndex].ToString();
foreach (GridDataItem item in RadGrid1.MasterTableView.Items)
{
if (curItem.Equals(item["FirstName"].ToString()))
{
CheckBox chkbx = (CheckBox)item.FindControl("CheckBoxStatus");
chkbx.Checked = true;
}
}
}
}
Thanks,
Anita
This is my code. Can you please check what is missing here.
ASPX page
<telerik:GridTemplateColumn UniqueName="TemplateEditColumn" HeaderText="Select" AllowFiltering="false">
<ItemTemplate>
<asp:CheckBox ID="CheckBoxStatus" runat="server" AutoPostBack="true" OnCheckedChanged="CheckBoxStatus_CheckedChanged" />
</ItemTemplate>
</telerik:GridTemplateColumn>
onCheckedChanged
protected void CheckBoxStatus_CheckedChanged(object sender, EventArgs e)
{
CheckBox chkbox = (CheckBox) sender;
GridDataItem item = (GridDataItem) chkbox.NamingContainer;
string value = item["FirstName"].Text;
ArrayList selectedItems;
if (Session["selectedItems"] == null)
{
selectedItems = new ArrayList();
}
else
{
selectedItems = (ArrayList)Session["selectedItems"];
}
if (chkbox.Checked)
{
selectedItems.Add(value);
}
else
{
selectedItems.Remove(value);
}
Session["selectedItems"] = selectedItems;
}
PreRender
protected void RadGrid2_PreRender(object sender, EventArgs e)
{
if (Session["selectedItems"] != null)
{
ArrayList selectedItems = (ArrayList) Session["selectedItems"];
Int16 stackIndex;
for (stackIndex = 0; stackIndex <= selectedItems.Count - 1; stackIndex++)
{
string curItem = selectedItems[stackIndex].ToString();
foreach (GridDataItem item in RadGrid1.MasterTableView.Items)
{
if (curItem.Equals(item["FirstName"].ToString()))
{
CheckBox chkbx = (CheckBox)item.FindControl("CheckBoxStatus");
chkbx.Checked = true;
}
}
}
}
Thanks,
Anita
0

Jayesh Goyani
Top achievements
Rank 2
answered on 11 Aug 2011, 03:48 PM
Hello,
let me know if any concern.
Thanks,
Jayesh Goyani
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="TelerikTest.Web.WebForm2" %>
<!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"
>
<
div
>
<
telerik:RadScriptManager
ID
=
"RadScriptManager1"
runat
=
"server"
>
</
telerik:RadScriptManager
>
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
GridLines
=
"None"
AllowPaging
=
"True"
AllowSorting
=
"True"
AutoGenerateColumns
=
"False"
AllowFilteringByColumn
=
"True"
OnNeedDataSource
=
"RadGrid1_NeedDataSource"
OnPreRender
=
"RadGrid1_PreRender"
>
<
PagerStyle
Mode
=
"NextPrevAndNumeric"
></
PagerStyle
>
<
MasterTableView
DataKeyNames
=
"ID"
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"ID"
HeaderText
=
"ID"
UniqueName
=
"ID"
SortExpression
=
"ID"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Name"
HeaderText
=
"Name"
UniqueName
=
"Name"
SortExpression
=
"Name"
>
</
telerik:GridBoundColumn
>
<
telerik:GridTemplateColumn
>
<
ItemTemplate
>
<
asp:CheckBox
ID
=
"CheckBox1"
runat
=
"server"
AutoPostBack
=
"True"
CausesValidation
=
"false"
OnCheckedChanged
=
"CheckBox1_CheckedChanged"
/>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
</
Columns
>
</
MasterTableView
>
</
telerik:RadGrid
>
</
div
>
</
form
>
</
body
>
</
html
>
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
Telerik.Web.UI;
namespace
TelerikTest.Web
{
public
partial
class
WebForm2 : System.Web.UI.Page
{
public
string
_SelectedID
{
set
{
ViewState[
"SelectedID"
] = value;
}
get
{
if
(ViewState[
"SelectedID"
] !=
null
)
{
return
Convert.ToString(ViewState[
"SelectedID"
]);
}
else
{
return
",0,"
;
}
}
}
protected
void
Page_Load(
object
sender, EventArgs e)
{
}
protected
void
RadGrid1_PreRender(
object
sender, EventArgs e)
{
foreach
(GridDataItem item
in
RadGrid1.Items)
{
if
(_SelectedID.Contains(
","
+ Convert.ToInt32(item.GetDataKeyValue(
"ID"
)).ToString() +
","
))
{
((CheckBox)item.FindControl(
"CheckBox1"
)).Checked =
true
;
}
}
}
protected
void
RadGrid1_NeedDataSource(
object
sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
dynamic data =
new
[] {
new
{ ID = 1, Name =
"Name1"
},
new
{ ID = 2, Name =
"Name2"
},
new
{ ID = 3, Name =
"Name3"
},
new
{ ID = 4, Name =
"Name4"
},
new
{ ID = 5, Name =
"Name5"
},
new
{ ID = 6, Name =
"Name6"
},
new
{ ID = 7, Name =
"Name7"
},
new
{ ID = 8, Name =
"Name8"
},
new
{ ID = 9, Name =
"Name9"
},
new
{ ID = 10, Name =
"Name10"
},
new
{ ID = 11, Name =
"Name11"
},
new
{ ID = 12, Name =
"Name12"
},
new
{ ID = 13, Name =
"Name13"
},
new
{ ID = 14, Name =
"Name14"
},
new
{ ID = 15, Name =
"Name15"
}
};
RadGrid1.DataSource = data;
}
protected
void
CheckBox1_CheckedChanged(
object
sender, EventArgs e)
{
CheckBox CheckBox1 = sender
as
CheckBox;
GridDataItem item = (GridDataItem)CheckBox1.NamingContainer;
int
ID = Convert.ToInt32(item.GetDataKeyValue(
"ID"
));
if
(CheckBox1.Checked)
{
_SelectedID += ID.ToString() +
","
;
}
else
{
_SelectedID += _SelectedID.Replace(ID.ToString() +
","
,
""
);
}
}
}
}
let me know if any concern.
Thanks,
Jayesh Goyani
0

Anita
Top achievements
Rank 1
answered on 11 Aug 2011, 03:53 PM
Thanks Rakesh & Jayesh.
I finally managed to get it working.
-Anita
I finally managed to get it working.
-Anita