This is a migrated thread and some comments may be shown as answers.

Server side checkbox selection does't fire ItemCommand

1 Answer 185 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Marco Teodoro
Top achievements
Rank 1
Marco Teodoro asked on 15 Jul 2011, 07:23 PM
Hello,

i'm trying to select items from a check box on a radgrid but the RadGrid1_ItemCommand does't work...

this is my codebehind
namespace Website
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                RadGrid1.DataSource = getDataSource();
                RadGrid1.DataBind();
            }
        }


        private DataTable getDataSource()
        {
            var dt = new DataTable();
            dt.Columns.Add("IDLOTE");
            dt.Columns.Add("DESC");


            for (int i = 1; i <= 20; i++)
            {
                DataRow dr = dt.NewRow();
                dr["IDLOTE"] = i;
                dr["DESC"] = "desc" + i;
                dt.Rows.Add(dr);
            }
            return dt;
        }


        protected void CheckUnckeckAll(object sender, EventArgs e)
        {
        }


        protected void CheckUncheckItem(object sender, EventArgs e)
        {
            ((sender as CheckBox).NamingContainer as GridItem).Selected = (sender as CheckBox).Checked;
        }


        protected void RadGrid1_ItemCommand(object source, GridCommandEventArgs e)
        {
            ArrayList selectedItems;
            if (Session["selectedItems"] == null)
            {
                selectedItems = new ArrayList();
            }
            else
            {
                selectedItems = (ArrayList)Session["selectedItems"];
            }
            if (e.CommandName == RadGrid.SelectCommandName && e.Item is GridDataItem)
            {
                GridDataItem dataItem = (GridDataItem)e.Item;
                string customerID = dataItem.OwnerTableView.DataKeyValues[dataItem.ItemIndex]["IDLOTE"].ToString();
                selectedItems.Add(customerID);
                Session["selectedItems"] = selectedItems;
            }
            if (e.CommandName == RadGrid.DeselectCommandName && e.Item is GridDataItem)
            {
                GridDataItem dataItem = (GridDataItem)e.Item;
                string customerID = dataItem.OwnerTableView.DataKeyValues[dataItem.ItemIndex]["IDLOTE"].ToString();
                selectedItems.Remove(customerID);
                Session["selectedItems"] = selectedItems;
            }
        }


        protected void RadGrid1_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 (GridItem item in RadGrid1.MasterTableView.Items)
                    {
                        if (item is GridDataItem)
                        {
                            GridDataItem dataItem = (GridDataItem)item;
                            if (curItem.Equals(dataItem.OwnerTableView.DataKeyValues[dataItem.ItemIndex]["CustomerID"].ToString()))
                            {
                                dataItem.Selected = true;
                                break;
                            }
                        }
                    }
                }
            }
        }
        protected void RadGrid1_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
        {
            RadGrid1.DataSource = getDataSource();
        }
    }
}

this is the view,

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Website.WebForm1" %>


<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<!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">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div>
        <!-- content start -->
        <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
            <AjaxSettings>
                <telerik:AjaxSetting AjaxControlID="RadGrid1">
                    <UpdatedControls>
                        <telerik:AjaxUpdatedControl ControlID="RadGrid1" />
                    </UpdatedControls>
                </telerik:AjaxSetting>
            </AjaxSettings>
        </telerik:RadAjaxManager>
        <telerik:RadGrid ID="RadGrid1" runat="server" OnItemCommand="RadGrid1_ItemCommand"
            OnPreRender="RadGrid1_PreRender" OnNeedDataSource="RadGrid1_NeedDataSource" GridLines="None"
            AllowFilteringByColumn="True" AllowPaging="True" AllowSorting="True" Skin="Windows7"
            AllowMultiRowSelection="True" Culture="pt-PT" Width="900px" PageSize="5">
            <ClientSettings AllowColumnsReorder="True" ReorderColumnsOnClient="True" EnableRowHoverStyle="true">
                <Selecting AllowRowSelect="true" />
                <Resizing AllowRowResize="False" EnableRealTimeResize="False" ResizeGridOnColumnResize="False"
                    AllowColumnResize="False"></Resizing>
            </ClientSettings>
            <MasterTableView AllowMultiColumnSorting="true" AutoGenerateColumns="False" DataKeyNames="IDLOTE">
                <Columns>
                    <telerik:GridButtonColumn Visible="false" Text="Select" CommandName="Select" />
                    <telerik:GridButtonColumn Visible="false" Text="Deselect" CommandName="Deselect" />
                    <telerik:GridTemplateColumn UniqueName="CheckBoxTemplateColumn" AllowFiltering="false">
                        <HeaderTemplate>
                            <asp:CheckBox ID="headerChkbox" OnCheckedChanged="CheckUnckeckAll" AutoPostBack="True"
                                runat="server"></asp:CheckBox>
                        </HeaderTemplate>
                        <ItemTemplate>
                            <asp:CheckBox ID="CheckBox1" OnCheckedChanged="CheckUncheckItem" AutoPostBack="True"
                                runat="server"></asp:CheckBox>
                        </ItemTemplate>
                    </telerik:GridTemplateColumn>
                    <telerik:GridBoundColumn DataField="IDLOTE" HeaderText="IDLOTE" ReadOnly="True" SortExpression="DESC"
                        UniqueName="IDLOTE">
                        <HeaderStyle Width="120px" />
                    </telerik:GridBoundColumn>
                    <telerik:GridBoundColumn DataField="DESC" HeaderText="DESC" SortExpression="DESC"
                        UniqueName="DESC">
                        <HeaderStyle Width="340px" />
                    </telerik:GridBoundColumn>
                </Columns>
            </MasterTableView>
            <PagerStyle Mode="NextPrevAndNumeric"></PagerStyle>
        </telerik:RadGrid>
    </div>
    </form>
</body>
</html>


what can be wrong?

1 Answer, 1 is accepted

Sort by
0
Jayesh Goyani
Top achievements
Rank 2
answered on 16 Jul 2011, 08:50 AM
hi,

problem : You are used Server-Side Row Selection so you are not able to fire itemcomand event.

solution 1:
protected void CheckUncheckItem(object sender, EventArgs e)
    {
        ((sender as CheckBox).NamingContainer as GridItem).Selected = (sender as CheckBox).Checked;
         
        CheckBox CheckBox1 = (CheckBox)sender;
        GridDataItem item = (GridDataItem)CheckBox1.NamingContainer;
     
 
    if (CheckBox1.Checked)
    {
             
            string customerID = item.GetDataKeyValue("IDLOTE").Tostring();
            selectedItems.Add(customerID);
            Session["selectedItems"] = selectedItems;
    }
    else
    {
 
            string customerID = item.GetDataKeyValue("IDLOTE").Tostring();
            selectedItems.Remove(customerID);
            Session["selectedItems"] = selectedItems;
    }
         
}



Solution 2:
If u want to fire itemcomand event then use Client-Side Row Selection and set one property in clientsettings.

<ClientSettings EnablePostbackOnRowClick="True" >



Thanks,
Jayesh Goyani
Tags
Grid
Asked by
Marco Teodoro
Top achievements
Rank 1
Answers by
Jayesh Goyani
Top achievements
Rank 2
Share this question
or