HI,
I have a RadGrid having a checkbox column, i have added the column as a ItemTemplate to make it editable in the regular mode.
<telerik:GridTemplateColumn UniqueName="IsSelected" DataField="IsSelected"> <ItemTemplate> <asp:CheckBox ID="chkBoolean" runat="server" Checked='<%# Convert.ToBoolean(Eval("IsSelected")) %>' Enabled='<%# Convert.ToBoolean(Eval("IsSelectionDisable")) %>' /> </ItemTemplate> </telerik:GridTemplateColumn>Using this I am able to display a checkbox as editable. Now my problem is how do i get the checked value of the checkox for saving it when the user has changed the checkbox. On click of a button i need to get all the rows that are still checked and save them.
Thanks
Arvind
15 Answers, 1 is accepted
protected void Button1_Click(object sender, EventArgs e) { foreach (GridDataItem item in RadGrid1.MasterTableView.Items) { CheckBox chkBoolean = item.FindControl("chkBoolean") as CheckBox; // access your checkbox here } }Thanks,
Jayesh Goyani
Can you please provide your code snippet?
Thanks,
Jayesh Goyani
I'm creating a dynamic radgrid with many templatecolumn containing checkboxes. CheckBox!!
I can set the values of checkboxes in ItemDatabound, but when I change the values and clique on validate Button, I cant find the checkboxes using the same code as in ItemDataBound, "MyCheckbox" is always NULL
Can you tell what is the wrong ?
CheckBox myCheckBox = new CheckBox(); foreach (GridDataItem myItem in RadGridSubscription.MasterTableView.Items) { for (var i = 2; i < RadGridSubscription.Columns.Count - 1; ++i) { myCheckBox = myItem.FindControl(RadGridSubscription.MasterTableView.Columns[i].UniqueName) as CheckBox; var job = int.Parse(RadGridSubscription.Columns[i].UniqueName.Replace("J", "")); var service = int.Parse(myItem.Cells[3].Text.Replace("S", "")); if (myCheckBox!= null && myCheckBox.Checked) { job = int.Parse(RadGridSubscription.Columns[i].UniqueName.Replace("J", "")); } else { } } }In the provided code snippet your are searching for controls with ID equal to the column names. Can you please confirm that your CheckBox controls have the same ID as the columns UniqueName?
Furthermore, before using the FindControl method, you may have to get reference to the TableCell first:
myCheckBox = myItem[RadGridSubscription.MasterTableView.Columns[i].UniqueName].FindControl("Check_Box_ID") as CheckBox;If the above does not help, please open a regular support ticket and provide the markup and the code-behind of your page, so we can have a better idea of your exact implementation.
Regards,
Konstantin Dikov
Telerik
Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.
Thank you for responding to my request.
The ID of myCheckbox has the same name as UniqueName, I have tried your line code, but I have the same issue.
I will try to open the ticket because my licence have expired and we are processing to renew it.
Regards,
Mohammed
Dassault Systemes
I would be really more productive if you open a regular support ticket and attach the page in question, so we can examine it locally.
However, if you decide that we will handle the issue here, please provide a simplified version of your code-behind, so we can take a look at it.
On a side note, can you please ensure that you are creating the CheckBox controls on each postback?
Regards,
Konstantin Dikov
Telerik
Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.
Thank you a lot. I will open a ticket as soon as our budget team validate the renewal for the licence.
Actually I will sent the all code page .cs and .ascx, and hope it wlil be enough for to investigate.
Regards
Mohammed
Dassault Systemes
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.SqlClient;using System.Data;using System.Threading;using Telerik.Web.UI;using CommunicationModel;using System.Net.NetworkInformation;using System.Drawing;using System.Web.UI.WebControls;using System.Web.UI;namespace InputTool.Pages{ public partial class Subscriptions : System.Web.UI.UserControl { private String connStr = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString; private static string Filter; //set as static because DataObjectSource doesn't call a specific instance of List to bind. protected void Page_Load(object sender, EventArgs e) { //RefreshB.Style["background-image"] = "url('" + System.Web.Configuration.WebConfigurationManager.AppSettings["ImageAbsolutePath"] + "ITIM/button-refresh.png')"; //Button1.Style["background-image"] = "url('" + System.Web.Configuration.WebConfigurationManager.AppSettings["ImageAbsolutePath"] + "ITIM/button-refresh.png')"; } protected void RadGridSubscription_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e) { fillGrid(false); } // Fill the checkboxes values protected void RadGridSubscription_ItemDataBound(object sender, GridItemEventArgs e) { if (e.Item.ItemType == GridItemType.Item || e.Item.ItemType == GridItemType.AlternatingItem) { DataRowView dr = (DataRowView)e.Item.DataItem; CheckBox myCheckBox = new CheckBox(); GridDataItem myItem = e.Item as GridDataItem; if (myItem != null) { for (var i = 2; i < RadGridSubscription.Columns.Count - 1; ++i) { myCheckBox = (CheckBox)e.Item.FindControl(RadGridSubscription.Columns[i].UniqueName); var job = int.Parse(RadGridSubscription.Columns[i].UniqueName.Replace("J","")); var service = int.Parse(dr[0].ToString()); myCheckBox.Checked = MySubscriptionData.GetJobsServiceAssociation(job,service);// if I found the relation between the job and service, the result will be TRUE if (myCheckBox.Checked) { // If it's checked U change the background color myCheckBox.BackColor = Color.LightBlue; } } } } } //Create the Radgrid dynimically public void fillGrid(bool performDataBind) { DataTable dt = new DataTable(); // get the services for the first columns dt = MySubscriptionData.GetServices(); //clear the grid after each postback RadGridSubscription.Columns.Clear(); RadGridSubscription.DataSource = dt; RadGridSubscription.MasterTableView.DataKeyNames = new string[] { "ID" }; //CREATE THE FIRST COLUMN GridBoundColumn boundColumn; boundColumn = new GridBoundColumn(); RadGridSubscription.MasterTableView.Columns.Add(boundColumn); boundColumn.DataField = "serviceName"; boundColumn.HeaderText = "Affected Services"; boundColumn.UniqueName = "service"; boundColumn.AllowFiltering = true; boundColumn.CurrentFilterFunction = GridKnownFunction.Contains; boundColumn.ItemStyle.Width = 80; boundColumn.ItemStyle.BackColor = Color.LightGray; //Create the hiden column for the ID boundColumn = new GridBoundColumn(); RadGridSubscription.MasterTableView.Columns.Add(boundColumn); boundColumn.DataField = "ID"; boundColumn.HeaderText = "service ID"; boundColumn.UniqueName = "serviceID"; boundColumn.Display = false; // now I will create dynamic Jobs columns containing check boxes dt = MySubscriptionData.GetJobs(); GridTemplateColumn templateColumn = new GridTemplateColumn(); // for each Job I creat a column foreach (DataRow dr in dt.Rows) { templateColumn = new GridTemplateColumn(); templateColumn.ItemTemplate = new MyTemplate(dr[2].ToString()); templateColumn.HeaderText = dr[1].ToString(); templateColumn.UniqueName = dr[2].ToString(); RadGridSubscription.MasterTableView.Columns.Add(templateColumn); } //Create the last fixed column to force subscription templateColumn = new GridTemplateColumn(); templateColumn.ItemTemplate = new MyTemplate("ForceSubscription"); templateColumn.HeaderText = "Force subscription to custom user settings"; templateColumn.UniqueName = "ForceSubscription"; RadGridSubscription.MasterTableView.Columns.Add(templateColumn); templateColumn.ItemStyle.BackColor = Color.LightGray; if (performDataBind) RadGridSubscription.DataBind(); } // the checkbox telpmate private class MyTemplate : ITemplate { public CheckBox myCheckBox; private string colname; public MyTemplate(string cName) { colname = cName; } public void InstantiateIn(System.Web.UI.Control container) { myCheckBox = new CheckBox(); myCheckBox.ID = colname; //myCheckBox. = true; // myCheckBox.DataBinding += new EventHandler(boolValue_DataBinding); container.Controls.Add(myCheckBox); } //void boolValue_DataBinding(object sender, EventArgs e) //{ // CheckBox cBox = (CheckBox)sender; // GridDataItem container = (GridDataItem)cBox.NamingContainer; // //cBox.Checked = (bool)((DataRowView)container.DataItem)["Bool"]; //} } protected void btnCancel1_Click(object sender, EventArgs e) { fillGrid(true); } // //Her I have the issue when I want save the grid to save changes, I need to get each checkbox value and update the database // protected void btnSave1_Click(object sender, EventArgs e) { if(RadGridSubscription.Items.Count > 0) { CheckBox myCheckBox = new CheckBox(); foreach (GridDataItem myItem in RadGridSubscription.MasterTableView.Items) { for (var i = 2; i < RadGridSubscription.Columns.Count - 1; ++i) { myCheckBox = myItem[RadGridSubscription.MasterTableView.Columns[i].UniqueName].FindControl(RadGridSubscription.MasterTableView.Columns[i].UniqueName) as CheckBox; var job = int.Parse(RadGridSubscription.Columns[i].UniqueName.Replace("J", "")); var service = int.Parse(myItem.Cells[3].Text.Replace("S", "")); if (myCheckBox!= null && myCheckBox.Checked) { job = int.Parse(RadGridSubscription.Columns[i].UniqueName.Replace("J", "")); } else { } } } //DataRowView dr = (DataRowView)e.Item.DataItem; //GridDataItem myItem = e.Item as GridDataItem; fillGrid(true); } } }}<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Subscriptions.ascx.cs" Inherits="InputTool.Pages.Subscriptions" %><%@ Register assembly="Telerik.Web.UI" namespace="Telerik.Web.UI" tagprefix="telerik" %><telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" UpdateInitiatorPanelsOnly="true"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="ConfiguratorPanel"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="RadGridSubscription" LoadingPanelID="RadAjaxLoadingPanel1" /> <telerik:AjaxUpdatedControl ControlID="ConfiguratorPanel" /> </UpdatedControls> </telerik:AjaxSetting> <telerik:AjaxSetting AjaxControlID="RadGridSubscription"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="RadGridSubscription" LoadingPanelID="RadAjaxLoadingPanel1" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings></telerik:RadAjaxManager><telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server"></telerik:RadAjaxLoadingPanel><asp:Button ID="btnSave1" runat="server" Text="Save" onclick="btnSave1_Click" /><asp:Button ID="btnCancel1" runat="server" Text="Cancel" onclick="btnCancel1_Click" /><br /><br /><telerik:RadGrid ID="RadGridSubscription" runat="server" GridLines="Both" AllowSorting="True" AllowPaging="False" Height="600px" AutoGenerateColumns="false" OnNeedDataSource="RadGridSubscription_NeedDataSource" OnItemDataBound="RadGridSubscription_ItemDataBound" EnableViewState="true"> <ClientSettings> <Scrolling AllowScroll="true" UseStaticHeaders="True" SaveScrollPosition="true" FrozenColumnsCount="1"></Scrolling> </ClientSettings></telerik:RadGrid><br /><br /><asp:Button ID="btnSave2" runat="server" Text="Save" onclick="btnSave1_Click" /><asp:Button ID="btnCancel2" runat="server" Text="Cancel" onclick="btnCancel1_Click"/> The issue that you are experiencing is due to the fact that the OnItemCreated event is firing before your button's click event and the check box will be recreated once again. If you need to edit the values in the check box controls, you will have to put all items in edit mode and traverse the EditItems collection when you need to retrieve the new values.
You can take a look at the following help article for more details on this matter:
Hope this helps.
Regards,
Konstantin Dikov
Telerik
Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.
Hello All,
Thank you for your help, I have found the solution or my real issue.
I was loanding dynamically my grid on Onload method but it should be done on OnpreRender Methos and it works fine.
You can use the UpdateCommand or ItemCommand to achieve this requirement:
http://demos.telerik.com/aspnet-ajax/grid/examples/data-editing/manual-crud-operations/defaultcs.aspx
In addition, you can also check the attached web site sample.
Regards,
Eyup
Telerik by Progress
I am facing exactly the same issue. All of my dynamically loaded checkbox controls are not retrieved when parsing through the items on button click event. It is not the case for other controls.
This happens only when i try to find the checkbox control. I have same column UniqueName and Checkbox ID. Still getting NULL value every time.
Can you please explain in detail how you exactly rectified this issue? [Any sample code would be of huge help.]
https://www.telerik.com/forums/get-checkbox-control-added-dynamically-in-gridtemplate-column
Thank you very much for the link. Made my day. Solved my issue.
I'm glad you've managed to resolve the issue and thank you for sharing this link with our community. I hope it will prove helpful to other developers as well.
Regards,
Eyup
Progress Telerik

