get Checkbox control added dynamically in GridTemplate Column

5 posts, 1 answers
  1. Jayesh Goyani
    Jayesh Goyani avatar
    2733 posts
    Member since:
    May 2010

    Posted 25 Jul 2011 Link to this post

    Requirements

    RadControls version 2011.1.519.40
    .NET version 4.0
    Visual Studio version 2010
    programming language C#
    browser support

    all browsers supported by RadControls


    PROJECT DESCRIPTION
    Here I have one radgrid in which I have two boundcolumns and others are I have added dynamically at runtime "GridTemplateColumn" from code behind. In which I have added one check box control in ItemTemplate. Here also I have one save button outside of the radgrid. Now when I am clicking on that save button I can getting that checkbox added dynamically in columns on click of save button.


    Default.aspx
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
            </telerik:RadScriptManager>
            <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
                <AjaxSettings>
                    <telerik:AjaxSetting AjaxControlID="RadGrid1">
                        <UpdatedControls>
                            <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" />
                        </UpdatedControls>
                    </telerik:AjaxSetting>
                    <telerik:AjaxSetting AjaxControlID="RadButton1">
                        <UpdatedControls>
                            <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" />
                            <telerik:AjaxUpdatedControl ControlID="lblColumn1" />
                            <telerik:AjaxUpdatedControl ControlID="lblColumn2" />
                        </UpdatedControls>
                    </telerik:AjaxSetting>
                </AjaxSettings>
            </telerik:RadAjaxManager>
            <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server">
            </telerik:RadAjaxLoadingPanel>
        </div>
        <div>
            <telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="false" OnNeedDataSource="RadGrid1_NeedDataSource"
                OnItemDataBound="RadGrid1_ItemDataBound" OnPreRender="RadGrid1_PreRender">
                <MasterTableView DataKeyNames="ID">
                    <Columns>
                        <telerik:GridBoundColumn DataField="ID" HeaderText="ID">
                        </telerik:GridBoundColumn>
                        <telerik:GridBoundColumn DataField="Name" HeaderText="Name">
                        </telerik:GridBoundColumn>
                    </Columns>
                </MasterTableView>
            </telerik:RadGrid>
            <br />
            <telerik:RadButton ID="RadButton1" Text="Click for selected item" runat="server"
                OnClick="RadButton1_Click">
            </telerik:RadButton>
            <br />
            <asp:Label ID="lblColumn1" runat="server"></asp:Label>
             
        </div>
        </form>
    </body>
    </html>


    Default.aspx.cs
    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;
    using System.Data;
    using System.Text;
     
    public partial class Default2 : System.Web.UI.Page
    {
        protected void Page_Init(object sender, EventArgs e)
        {
            // you can dynamically add multiple column by for each loop
     
            foreach (DataRow dr in Class1.GetDataTable().Rows)
            {
                GridTemplateColumn objGridTemplateColumn = new GridTemplateColumn();
                objGridTemplateColumn.HeaderText = dr["ColumnUniqueName"].ToString();
                objGridTemplateColumn.UniqueName = dr["ColumnUniqueName"].ToString();
                objGridTemplateColumn.ItemTemplate = new MyTemplate(dr["ColumnControlID"].ToString());
                RadGrid1.MasterTableView.Columns.Add(objGridTemplateColumn);
            }
     
        }
        protected void Page_Load(object sender, EventArgs e)
        {
     
        }
        protected void RadGrid1_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
        {
            dynamic data = new[] {
                    new { ID = 1, Name ="Name1",Isbool = true},
                    new { ID = 2, Name = "Name2",Isbool = false},
                    new { ID = 3, Name = "Name3",Isbool = true},
                    new { ID = 4, Name = "Name4",Isbool = false},
                    new { ID = 5, Name = "Name5",Isbool = true},
                    new { ID = 6, Name ="Name6",Isbool = true},
                    new { ID = 7, Name = "Name7",Isbool = false},
                    new { ID = 8, Name = "Name8",Isbool = true},
                    new { ID = 9, Name = "Name9",Isbool = true},
                    new { ID = 10, Name = "Name10",Isbool = false}
                };
     
            RadGrid1.DataSource = data;
        }
        protected void RadButton1_Click(object sender, EventArgs e)
        {
            StringBuilder sb = new StringBuilder();
     
            foreach (GridDataItem item in RadGrid1.Items)
            {
                foreach (DataRow dr in Class1.GetDataTable().Rows)
                {
                    CheckBox objCheckBox = (CheckBox)item[dr["ColumnUniqueName"].ToString()].Controls[0];
                    if (objCheckBox.Checked)
                    {
                        sb.Append(dr["ColumnUniqueName"].ToString() + " : " + item.GetDataKeyValue("ID").ToString());
                        sb.Append("</br>");
                    }
                }
            }
     
            lblColumn1.Text = sb.ToString();
        }
        protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
        {
            if (e.Item is GridDataItem)
            {
                GridDataItem item = e.Item as GridDataItem;
     
                foreach (DataRow dr in Class1.GetDataTable().Rows)
                {
                    if(dr["ColumnUniqueName"].ToString() == "CheckBoxColumn1")
                    {
                        if (Convert.ToInt32(item.GetDataKeyValue("ID")) == 1 || Convert.ToInt32(item.GetDataKeyValue("ID")) == 3)
                        {
                            CheckBox chkTemp = (CheckBox)item[dr["ColumnUniqueName"].ToString()].Controls[0];
                            chkTemp.Checked = true;
                        }
                    }
                    else if (dr["ColumnUniqueName"].ToString() == "CheckBoxColumn2")
                    {
                        if (Convert.ToInt32(item.GetDataKeyValue("ID")) == 2 || Convert.ToInt32(item.GetDataKeyValue("ID")) == 4)
                        {
                            CheckBox chkTemp = (CheckBox)item[dr["ColumnUniqueName"].ToString()].Controls[0];
                            chkTemp.Checked = true;
                        }
                    }
                }
            }
        }
        protected void RadGrid1_PreRender(object sender, EventArgs e)
        {
            int count = 0;
            foreach (GridColumn column in RadGrid1.Columns)
            {
                count++;
                if (count > Class1.GetDataTable().Columns.Count + 2)
                {
                    column.Visible = false;
                }
            }
        }
    }
     
    public class MyTemplate : ITemplate
    {
     
        protected CheckBox boolValue;
        private string colname;
     
        public MyTemplate(string cName)
        {
            colname = cName;
        }
     
        public void InstantiateIn(System.Web.UI.Control container)
        {
            boolValue = new CheckBox();
            boolValue.ID = colname;
            container.Controls.Add(boolValue);
        }
        void boolValue_DataBinding(object sender, EventArgs e)
        {
            CheckBox cBox = (CheckBox)sender;
            GridDataItem container = (GridDataItem)cBox.NamingContainer;
        }
     
    }


    Class1.cs
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data;
     
    /// <summary>
    /// Summary description for Class1
    /// </summary>
    public class Class1
    {
        public Class1()
        {
            //
            // TODO: Add constructor logic here
            //
        }
        public static DataTable GetDataTable()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ColumnID",typeof(Int32));
            dt.Columns.Add("ColumnUniqueName", typeof(string));
            dt.Columns.Add("ColumnControlID", typeof(string));
     
            dt.Rows.Add(1, "CheckBoxColumn1", "CheckBox1");
            dt.Rows.Add(2, "CheckBoxColumn2", "CheckBox2");
     
            return dt;
        }
    }

    Thanks,
    Jayesh Goyani
  2. Answer
    Iana Tsolova
    Admin
    Iana Tsolova avatar
    3388 posts

    Posted 26 Jul 2011 Link to this post

    Hello Jayesh,

    Thank you for sharing your experience with the community.

    I am sure that the sample you provided here will help other developer use RadGrid easier. However I am converting the thread to a forum as using declarative and dynamic columns in RadGrid is not a suggested practise though it might work in some cases.

    Regards,
    Iana
    the Telerik team

    Register for the Q2 2011 What's New Webinar Week. Mark your calendar for the week starting July 18th and book your seat for a walk through of all the exciting stuff we will ship with the new release!

  3. Jayesh Goyani
    Jayesh Goyani avatar
    2733 posts
    Member since:
    May 2010

    Posted 03 Aug 2011 Link to this post

    Hello,

    for future version please check below issue.
    we have to hide the columns because it will generate blank column in every postback.

    protected void RadGrid1_PreRender(object sender, EventArgs e)
        {
            int count = 0;
            foreach (GridColumn column in RadGrid1.Columns)
            {
                count++;
                if (count > Class1.GetDataTable().Columns.Count + 2)
                {
                    column.Visible = false;
                }
            }
        }



    Thanks,
    Jayesh Goyani
  4. ramesh
    ramesh avatar
    4 posts
    Member since:
    Dec 2018

    Posted 19 Dec 2018 Link to this post

    Thank you very much for the post.
  5. ramesh
    ramesh avatar
    4 posts
    Member since:
    Dec 2018

    Posted 19 Dec 2018 Link to this post

    Thank you very much for the post.
Back to Top