Server side checkbox selection does't fire ItemCommand

2 posts, 0 answers
  1. Marco Teodoro
    Marco Teodoro avatar
    53 posts
    Member since:
    Apr 2010

    Posted 15 Jul 2011 Link to this post

    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?

  2. Jayesh Goyani
    Jayesh Goyani avatar
    2732 posts
    Member since:
    May 2010

    Posted 16 Jul 2011 Link to this post

    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
  3. UI for ASP.NET Ajax is Ready for VS 2017
Back to Top