Hello,
I would like to handle multiselection in RadGrid on server side, but not by storing the selected item during every selection/deselection like in the sample http://www.telerik.com/help/aspnet-ajax/grdpersistselectedrowsonsorting.html, but storing them only during sorting, paging, filtering and some custom commands. I have added a GridClientSelectColumn to my MasterTableView columns, so the graphical handling of the multiselection on one page works fine. But if I would like to get in the OnItemCommand handler of the grid(after paging, sorting or RadGrid.DeleteSelectedCommandName), whether the checkbox of a row(DataItem) is checked or not, I can not get this information. The returned states of the checkboxes are always false. Could you suggest a way, how can I get/set the selected state of a row in this case?
I don’t want to have callbacks by every (de)selection, although no EnablePostBackOnRowClick=true and RadGrid.SelectCommandName/RadGrid.DeselectCommandName or GridTemplateColumn with AutoPostBack=true. I could not solve the problem with GridTemplateColumn and AutoPostBack=false and another problem of this case, that the graphical part of the selection is not automatically solved.
Thanks:
Zoltán
My checkbox is in the third column. I get the state of the checkbox with the following:
bool selected = (dataItem.Cells[2].Controls[0] as CheckBox).Checked;
My RadGrid definition:
<telerik:RadGrid ID="RadGridFiltered" runat="server" Skin="WebBlue"
AllowSorting="true" AllowPaging="true" AllowMultiRowSelection="true" PageSize = 10
OnItemCommand="RadGridFiltered_OnItemCommand" OnPreRender="RadGridFiltered_PreRender">
<MasterTableView DataKeyNames="RETURN_ID" AutoGenerateColumns="true" CommandItemDisplay="Top" >
<CommandItemTemplate>
<div style="padding: 5px 5px;">
<asp:LinkButton ID="btnEditSelected" runat="server" CommandName="EditSelected" Visible='<%# RadGridFiltered.EditIndexes.Count == 0 %>'><img style="border:0px;vertical-align:middle;" alt="" src="Images/Edit.gif" />Kijelölt módosítása</asp:LinkButton>
</div>
</CommandItemTemplate>
<Columns>
<telerik:GridClientSelectColumn UniqueName="ClientSelectColumn" />
</Columns>
</MasterTableView>
<ClientSettings EnableRowHoverStyle="true">
<Selecting AllowRowSelect="true" EnableDragToSelectRows="true" />
</ClientSettings>
</telerik:RadGrid>
My selection store handler:
public void RadGridFiltered_OnItemCommand(object sender, GridCommandEventArgs args)
{
StoreSelectedItems();
.........
}
const string SessionSelectedItems = "SelectedItems";
const string KeyName = "RETURN_ID";
protected void StoreSelectedItems()
{
ArrayList selectedItems = (Session[SessionSelectedItems] != null) ? (ArrayList)(Session[SessionSelectedItems]) : new ArrayList();
foreach (GridDataItem dataItem in RadGridFiltered.MasterTableView.Items)
{
bool selected = (dataItem.Cells[2].Controls[0] as CheckBox).Checked; // ALWAYS FALSE !!!
dataItem.Selected = selected;
string id = dataItem.OwnerTableView.DataKeyValues[dataItem.ItemIndex][KeyName].ToString();
if (selected && !selectedItems.Contains(id))
selectedItems.Add(id);
else if (!selected && selectedItems.Contains(id))
selectedItems.Remove(id);
}
Session[SessionSelectedItems] = selectedItems;
}