Hi everybody and thanks for your help! Im facing this problem: Ive a Radgrid which has a GridTemplateColumn which has a CheckBox inside. In the page load 1 row is inserted in the radgrid and displayed properly. Then, there is a RadButton (which only Works in the client side). When pressed it binds the radgrid to a new datasource with 2 rows. The problem is that the first row is displayed correctly while the second row is missing the checkbox. I did not use Eval since the radgrid must be bind in the client side (then, Ive used gridRowBound and gridRowCreated). Ive prepared an example code to show exactly this problem: you just need to créate a Web Application “WebApplicationRadGridCheckBox” and modify the Default.aspx code with the code below.
Thank you very much! Matias
Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplicationRadGridCheckBox._Default" %><%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %><!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> <telerik:RadScriptBlock ID="RadScriptBlockTipoDocumentoDetails" runat="server"> <script type="text/javascript"> function Add(sender, eventArgs) { var grid = $find("<%=RadGridTest.ClientID %>"); var mt = grid.get_masterTableView(); var items = mt.get_dataItems(); var source = new Array(); var item = { Field1: false, Field2: "new item 1!!!" }; source[source.length] = item; var item2 = { Field1: false, Field2: "new item 2!!!" }; source[source.length] = item2; mt.set_dataSource(source); mt.dataBind(); } function gridRowBound (sender, args) { var checkbox = args.get_item().findElement("Field1"); if (checkbox && checkbox != null) { checkbox.checked = args.get_dataItem().Field1 == "True"; } } function gridRowCreated (sender, args) { var checkbox = args.get_item().findElement("Field1"); if (checkbox && checkbox != null) { checkbox.checked = args._gridDataItem.getDataKeyValue("Field1") == "True"; } } </script> </telerik:RadScriptBlock> <form id="form1" runat="server"> <asp:ScriptManager runat="server" ID="ScriptManager1"/> <div> <telerik:RadButton ID="RadButton1" runat="server" Text="Add" OnClientClicked="Add" UseSubmitBehavior="false" AutoPostBack="false"/> <telerik:RadGrid ID="RadGridTest" runat="server" AutoGenerateColumns="false" AllowMultiRowSelection="true" Height="200px"> <MasterTableView Caption="" ClientDataKeyNames="Field1,Field2" DataKeyNames="Field1,Field2"> <Columns> <telerik:GridTemplateColumn> <ItemTemplate> <asp:CheckBox ID="Field1" runat="server"/> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridBoundColumn HeaderText="Field2" DataField="Field2"/> </Columns> </MasterTableView> <ClientSettings EnableRowHoverStyle="true" > <Selecting AllowRowSelect="true" /> <Scrolling AllowScroll="True" SaveScrollPosition="True"/> <ClientEvents OnRowDataBound="gridRowBound" OnRowCreated="gridRowCreated"/> </ClientSettings> </telerik:RadGrid> </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;namespace WebApplicationRadGridCheckBox{ public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { List<TestClass> lista = new List<TestClass>() { new TestClass() { Field1 = true, Field2 = "JOJO" } }; RadGridTest.DataSource = lista; RadGridTest.DataBind(); } } public class TestClass { public Boolean Field1 { get; set; } public String Field2 { get; set; } }}