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

get Checkbox control added dynamically in GridTemplate Column

4 Answers 263 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Jayesh Goyani
Top achievements
Rank 2
Jayesh Goyani asked on 25 Jul 2011, 07:17 PM

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

4 Answers, 1 is accepted

Sort by
0
Accepted
Iana Tsolova
Telerik team
answered on 26 Jul 2011, 10:04 AM
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!

0
Jayesh Goyani
Top achievements
Rank 2
answered on 03 Aug 2011, 10:55 AM
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
0
ramesh
Top achievements
Rank 1
answered on 19 Dec 2018, 01:33 PM
Thank you very much for the post.
0
ramesh
Top achievements
Rank 1
answered on 19 Dec 2018, 01:33 PM
Thank you very much for the post.
Tags
Grid
Asked by
Jayesh Goyani
Top achievements
Rank 2
Answers by
Iana Tsolova
Telerik team
Jayesh Goyani
Top achievements
Rank 2
ramesh
Top achievements
Rank 1
Share this question
or