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

unable to perform filtering and sorting on dynamically added radgrid columns

4 Answers 353 Views
Grid
This is a migrated thread and some comments may be shown as answers.
VIJAY
Top achievements
Rank 1
VIJAY asked on 16 Sep 2011, 06:58 AM

i have added rad gridboundcolumns at run time and gridbuttoncolumns at design time .I m able to perform paging and resizing of grid but not sorting and filtering.When i click on grid columns for sorting ,entire grid gets disappear,and filter is not working at all.
I tried to add only those columns at run time which are dynamic and the fixed columns at design time,in that case sorting and filtering was working in some of the fixed columns and some of the dynamic colums but not for all columns.After that i added all columns at run time including grid design and button columns,but not even a single function was working(i.e. paging,sorting,page resize,filtering and delete),so i kept button columns at design time and rest all at runtime,other functionality is proper but again sorting and filtering is not working in this case also,is there anything additional that has to be done for sorting and filtering while adding columns dynamically

using System;

using System.Collections.Generic;

using System.Configuration;

using System.Text;

using System.Web;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Data;

using System.Linq;

using log4net;

using Telerik.Web.UI;

using Kalitte.Dashboard.Framework;

using Kalitte.Dashboard.Framework.Types;

 

 

 

namespace abc.Web.UserControls.Patient.Management

{

public partial class ProcedureMaster : System.Web.UI.UserControl, IWidgetControl

    {

        #region Page Variables

 

        //Flag that holds the value for redirection

        bool NeedRedirection = false;

        static ILog log = null;

        WidgetInstance instance = null;

        Kalitte.Dashboard.Framework.DashboardSurface dashboardSurface = null;

        bool dynamicCol = false;

        public bool CanView;

        public bool CanAdd;

        public bool CanEdit;

        public bool CanDelete;

       

        int UserId = BOL.Classes.EHRSessions.UserId;

 

        public short AddEditWindowWidth

        {

            get

            {

                return ViewState["AddEditWindowWidth"] != null ? Convert.ToInt16(ViewState["AddEditWindowWidth"].ToString()) : (short)850;

            }

            set

            {

                ViewState["AddEditWindowWidth"] = value;

            }

        }

 

        public short AddEditWindowHeight

        {

            get

            {

                return ViewState["AddEditWindowHeight"] != null ? Convert.ToInt16(ViewState["AddEditWindowHeight"].ToString()) : (short)620;

            }

            set

            {

                ViewState["AddEditWindowHeight"] = value;

            }

        }

 

        #endregion

         #region Page Events

         protected void Page_Load(object sender, EventArgs e)

        {

             }

        protected void rgdProcedureMaster_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e)

        {

            if (e.Item is GridFilteringItem)

            {

                if (hdnFilter.Value == "")

                    e.Item.Display = false;

            }

            else if (e.Item is GridDataItem)

            {

                GridDataItem item = (GridDataItem)e.Item;

                ImageButton ibtn = null;

 

                ibtn = (ImageButton)item["ibtnEdit"].Controls[0];

                if (ibtn != null) ibtn.Attributes.Add("onclick", "javascript:openRadWindow('Patient/Management/ProcedureMaster.aspx?&Id=" + DataBinder.Eval(e.Item.DataItem, "Id") + "&CallBackID=" + btnReloadButton.ClientID + "', " + AddEditWindowWidth + "," + AddEditWindowHeight + ",'" + instance.Title + "');");

                ibtn.AlternateText = Utility.ContentFetcher.GetResourceContent("RES_002", BOL.Classes.EHRSessions.Culture);

                ibtn.ToolTip = Utility.ContentFetcher.GetResourceContent("RES_002", BOL.Classes.EHRSessions.Culture);

 

                ibtn = (ImageButton)item["ibtnDelete"].Controls[0];

                ibtn.AlternateText = Utility.ContentFetcher.GetResourceContent("RES_003", BOL.Classes.EHRSessions.Culture);

                ibtn.ToolTip = Utility.ContentFetcher.GetResourceContent("RES_003", BOL.Classes.EHRSessions.Culture);

               

            }

            else if (e.Item is GridPagerItem && !(e.Item as GridPagerItem).IsTopPager)

                rgdProcedureMaster.PagerStyle.AlwaysVisible = (rgdProcedureMaster.MasterTableView != null && rgdProcedureMaster.MasterTableView.DataSourceCount > 5);

 

        }

 

        protected void rgdProcedureMaster_ItemCommand(object sender, GridCommandEventArgs e)

        {

            if (NeedRedirection || WasSessionEnd()) return;

            try

            {

                if (e.CommandName == "Page" || e.CommandName == "ChangePageSize" || e.CommandName == "Sort" || e.CommandName == "Filter")

                {

                    LoadGridColumns();

                    ConfigForm();

                    LoadProcedureData();

                   

                }

                else if (e.CommandName == "Delete")

                {

                    GridDataItem item = (GridDataItem)e.Item;

                    string procedureIds = Convert.ToString(item.GetDataKeyValue("Id")) + ",";

                    Result result = abc.BLL.Master.Management.Procedures.DeleteProcedures(procedureIds, BOL.Classes.EHRSessions.ClinicId, BOL.Classes.EHRSessions.UserId, LanguageCulture.EN_US);

                    if (result.Status)

                    {

                        LoadGridColumns();

                        ConfigForm();

                        LoadProcedureData();

                    }

                }

            }

        }

  

        #endregion

         #region Page Methods

         private void LoadProcedureData()

        {

            Result result = abc.BLL.Master.Management.Procedures.GetProceduresList(0, BOL.Classes.EHRSessions.ClinicId, LanguageCulture.EN_US, DataFormat.DATASET);

 

            DataTable dt = new DataTable();

            dt.Columns.Add("Id");

            dt.Columns.Add("ProcedureName");

 

            for (int i = 0; i < result.Ds.Tables[0].Rows.Count; i++)

            {

                string pTypeId = "PT_"+result.Ds.Tables[0].Rows[i]["ProcedureTypeLookupId"].ToString();

                bool isExist = false;

                foreach (DataColumn col in dt.Columns)

                {

                    if (pTypeId.Equals(col.ToString()))

                        isExist = true;

                }

                if (!isExist)

                    dt.Columns.Add(pTypeId);

            }

 

            dt.Columns.Add("RecordStatusLookupDisplayValue");

            dt.Columns.Add("CT_1");

            dt.Columns.Add("CTA_1");

 

            for (int i = 0; i < result.Ds.Tables[0].Rows.Count; i++)

            {

                 int tmpId = Convert.ToInt32(result.Ds.Tables[0].Rows[i]["Id"].ToString());

                string pName = result.Ds.Tables[0].Rows[i]["ProcedureName"].ToString();

                string dvalue = "PT_"+result.Ds.Tables[0].Rows[i]["ProcedureTypeLookupId"].ToString();

 

                if (dt.Rows.Count == 0)

                {

                    DataRow dr = dt.NewRow();

                    dr["Id"] = result.Ds.Tables[0].Rows[i]["Id"];

                    dr["ProcedureName"] = result.Ds.Tables[0].Rows[i]["ProcedureName"];

                    dr["RecordStatusLookupDisplayValue"] = result.Ds.Tables[0].Rows[i]["RecordStatusLookupDisplayValue"];

                    dr["CT_1"] = result.Ds.Tables[0].Rows[i]["CT_1"];

                    dr["CTA_1"] = result.Ds.Tables[0].Rows[i]["CTA_1"];

                    foreach (DataColumn dc in dt.Columns)

                    {

                        if (dvalue.Equals(dc.ColumnName.ToString()))

                            dr[dc.ColumnName] = "√";

                    }

                    dt.Rows.Add(dr);

                }

                else if (dt.Rows.Count > 0)

                {

                    dt.DefaultView.RowFilter = "Id=" + tmpId;

                    if (dt.DefaultView.Count > 0)

                    {

                        foreach (DataColumn dc in dt.Columns)

                        {

                            if (dvalue.Equals(dc.ColumnName.ToString()))

                                dt.DefaultView[0][dc.ColumnName] = "√";

                        }

                    }

                    else

                    {

                        DataRow dr1 = dt.NewRow();

                        dr1["Id"] = result.Ds.Tables[0].Rows[i]["Id"];

                        dr1["ProcedureName"] = result.Ds.Tables[0].Rows[i]["ProcedureName"];

                       

                        foreach (DataColumn dc in dt.Columns)

                        {

                            if (dvalue.Equals(dc.ColumnName.ToString()))

                                dr1[dc.ColumnName] = "√";

                        }

 

                        dr1["RecordStatusLookupDisplayValue"] = result.Ds.Tables[0].Rows[i]["RecordStatusLookupDisplayValue"];

                        dr1["CT_1"] = result.Ds.Tables[0].Rows[i]["CT_1"];

                        dr1["CTA_1"] = result.Ds.Tables[0].Rows[i]["CTA_1"];

 

                        dt.Rows.Add(dr1);

                    }

                }

            }

             dt.DefaultView.RowFilter = "";

            rgdProcedureMaster.DataSource = dt.DefaultView;

            rgdProcedureMaster.DataBind();

 

            bool needFilterAndSort = (dt.DefaultView != null && dt.DefaultView.Count > 0);

             lnkFilter.Style.Add("display", (needFilterAndSort ? "''" : "none"));

 

            //If filter not needed then reset the value in hdnFilter

            if (!needFilterAndSort) hdnFilter.Value = string.Empty;

            rgdProcedureMaster.AllowSorting = needFilterAndSort;

        }

 

        private void LoadGridColumns()

        {

            String lookupValues = LookupType.ProcedureType.ToString();

            Result result = BLL.Master.LookupReference.GetLookupReferenceList(lookupValues, BOL.Classes.EHRSessions.ClinicId, (LanguageCulture)BOL.Classes.EHRSessions.CultureId, ResultFormat.ILIST);

            BindDynamicColumns(result.LookupReferenceList, LookupType.ProcedureType.ToString());

         }

 

        private void BindDynamicColumns(IList<BOL.Master.LookupReference> iList, string lookUpType)

        {

            List<BOL.Master.LookupReference> results = iList.Where(d => d.LookupType == lookUpType).ToList();

 

            GridBoundColumn gbc;

 

            gbc = new GridBoundColumn();

            gbc.HeaderText = "Custome Field 2";

            gbc.DataField = "CTA_1";

            gbc.SortExpression = "CTA_1";

            gbc.UniqueName = "CTA_1";

            gbc.AutoPostBackOnFilter = false;

            gbc.CurrentFilterFunction = GridKnownFunction.Contains;

            gbc.FilterListOptions = GridFilterListOptions.VaryByDataType;

            gbc.ShowFilterIcon = true;

            gbc.DataType = System.Type.GetType("System.String");

            gbc.Visible = false;

            rgdProcedureMaster.MasterTableView.Columns.AddAt(0, gbc);

           

            gbc = new GridBoundColumn();

            gbc.HeaderText = "Custome Field 1";

            gbc.DataField = "CT_1";

            gbc.SortExpression = "CT_1";

            gbc.UniqueName = "CT_1";

            gbc.AutoPostBackOnFilter = false;

            gbc.CurrentFilterFunction = GridKnownFunction.Contains;

            gbc.FilterListOptions = GridFilterListOptions.VaryByDataType;

            gbc.ShowFilterIcon = true;

            gbc.Visible = false;

            rgdProcedureMaster.MasterTableView.Columns.AddAt(0, gbc);

   

            gbc = new GridBoundColumn();

            gbc.HeaderText = "Status";

            gbc.DataField = "RecordStatusLookupDisplayValue";

            gbc.SortExpression = "RecordStatusLookupDisplayValue";

            gbc.UniqueName = "RecordStatusLookupDisplayValue";

            gbc.AutoPostBackOnFilter = false;

            gbc.CurrentFilterFunction = GridKnownFunction.Contains;

            gbc.FilterListOptions = GridFilterListOptions.VaryByDataType;

            gbc.ShowFilterIcon = true;

            gbc.Visible = false;

            rgdProcedureMaster.MasterTableView.Columns.AddAt(0, gbc);

 

            for (int i = 0; i < results.Count; i++)

 

            {

                gbc = new GridBoundColumn();

                gbc.HeaderText = results[i].DisplayValue;

                gbc.DataField = "PT_" + results[i].Id.ToString();

                gbc.SortExpression = "PT_" + results[i].Id.ToString();

                gbc.UniqueName = "PT_" + results[i].Id.ToString();

                gbc.AutoPostBackOnFilter = false;

                gbc.CurrentFilterFunction = GridKnownFunction.Contains;

                gbc.FilterListOptions = GridFilterListOptions.VaryByDataType;

                gbc.ShowFilterIcon = true;

                gbc.ItemStyle.HorizontalAlign = HorizontalAlign.Center;

                rgdProcedureMaster.MasterTableView.Columns.AddAt(0, gbc);

             

            }

 

            gbc = new GridBoundColumn();

            gbc.HeaderText = "Procedure Name";

            gbc.DataField = "ProcedureName";

            gbc.SortExpression = "ProcedureName";

            gbc.UniqueName = "ProcedureName";

            gbc.AutoPostBackOnFilter = false;

            gbc.CurrentFilterFunction = GridKnownFunction.Contains;

            gbc.FilterListOptions = GridFilterListOptions.VaryByDataType;

            gbc.ShowFilterIcon = true;

            gbc.Visible = false;

            rgdProcedureMaster.MasterTableView.Columns.AddAt(0, gbc);

 

        }

 

         #endregion

        #region Widget Events

         public void Bind(WidgetInstance instance)

        {

            if (NeedRedirection || WasSessionEnd()) return;

            if (!instance.Hidden)

            {

                try

                {

                    ViewState["instance"] = instance.InstanceKey;

                   LoadGridColumns();

                   if (rgdProcedureMaster != null && rgdProcedureMaster.MasterTableView.SortExpressions.Count == 0)

                   {

                       GridSortExpression sortExpression = new GridSortExpression();

                       sortExpression.FieldName = "ProcedureName";

                       sortExpression.SortOrder = GridSortOrder.Ascending;

                       //Add sort expression, which will sort against first column

                       rgdProcedureMaster.MasterTableView.SortExpressions.AddSortExpression(sortExpression);

                   }

                    ConfigForm();

                    ConfigResources();

                    LoadProcedureData();

                 }

                 catch (EHRExceptions ex)

                {

                    System.Web.UI.ScriptManager.RegisterStartupScript(upProcedureMaster, upProcedureMaster.GetType(), "excAlert", "$(document).ready(function(){jAlert('" + Utility.ContentFetcher.GetValidationMessage("GREX_1", BOL.Classes.EHRSessions.Culture) + "');});", true);

                    Utility.MailSender.ExceptionLogger(log, ex.ErrorCode, BOL.Classes.EHRSessions.ClinicId, BOL.Classes.EHRSessions.UserId, ex.Message, ex.GetBaseException());

                }

                catch (Exception ex)

                {

                    System.Web.UI.ScriptManager.RegisterStartupScript(upProcedureMaster, upProcedureMaster.GetType(), "excAlert", "$(document).ready(function(){jAlert('" + Utility.ContentFetcher.GetValidationMessage("GREX_1", BOL.Classes.EHRSessions.Culture) + "');});", true);

                    Utility.MailSender.ExceptionLogger(log, "abc.Web.UserControls.Patient.Management.ProcedureMaster:001 - Bind", BOL.Classes.EHRSessions.ClinicId, BOL.Classes.EHRSessions.UserId, ex.Message, ex);

                }

            }

        }

 

        public UpdatePanel[] Command(WidgetInstance instance, Kalitte.Dashboard.Framework.WidgetCommandInfo commandData, ref UpdateMode updateMode)

        {

            if (NeedRedirection || WasSessionEnd()) return null;

            UpdatePanel[] upProcedure = null;

 

            try

            {

                if (!instance.Hidden)

                {

                    if (commandData.CommandName == "Reload" || commandData.CommandName == "refresh")

                    {

                        LoadGridColumns();

                        ConfigForm();

                        LoadProcedureData();

                        upProcedure = new UpdatePanel[] { upProcedureMaster };

                    }

                 }

            }

            catch (EHRExceptions ex)

            {

                System.Web.UI.ScriptManager.RegisterStartupScript(upProcedureMaster, upProcedureMaster.GetType(), "excAlert", "$(document).ready(function(){jAlert('" + Utility.ContentFetcher.GetValidationMessage("GREX_1", BOL.Classes.EHRSessions.Culture) + "');});", true);

                Utility.MailSender.ExceptionLogger(log, ex.ErrorCode, BOL.Classes.EHRSessions.ClinicId, BOL.Classes.EHRSessions.UserId, ex.Message, ex.GetBaseException());

            }

            catch (Exception ex)

            {

                System.Web.UI.ScriptManager.RegisterStartupScript(upProcedureMaster, upProcedureMaster.GetType(), "excAlert", "$(document).ready(function(){jAlert('" + Utility.ContentFetcher.GetValidationMessage("GREX_1", BOL.Classes.EHRSessions.Culture) + "');});", true);

                Utility.MailSender.ExceptionLogger(log, "abc.Web.UserControls.Patient.Management.ProcedureMaster:001 - Command", BOL.Classes.EHRSessions.ClinicId, BOL.Classes.EHRSessions.UserId, ex.Message, ex);

            }

             return upProcedure;

        }

         public void InitControl(Kalitte.Dashboard.Framework.WidgetInitParameters parameters)

        {

            if (NeedRedirection || WasSessionEnd()) return;

            try

            {

                instance = parameters.Instance;

                dashboardSurface = parameters.Surface;

 

            }

            catch (EHRExceptions ex)

            {

                System.Web.UI.ScriptManager.RegisterStartupScript(upProcedureMaster, upProcedureMaster.GetType(), "excAlert", "$(document).ready(function(){jAlert('" + Utility.ContentFetcher.GetValidationMessage("GREX_1", BOL.Classes.EHRSessions.Culture) + "');});", true);

                Utility.MailSender.ExceptionLogger(log, ex.ErrorCode, BOL.Classes.EHRSessions.ClinicId, BOL.Classes.EHRSessions.UserId, ex.Message, ex.GetBaseException());

            }

            catch (Exception ex)

            {

                System.Web.UI.ScriptManager.RegisterStartupScript(upProcedureMaster, upProcedureMaster.GetType(), "excAlert", "$(document).ready(function(){jAlert('" + Utility.ContentFetcher.GetValidationMessage("GREX_1", BOL.Classes.EHRSessions.Culture) + "');});", true);

                Utility.MailSender.ExceptionLogger(log, "abc.Web.UserControls.Patient.Management.ProcedureMaster:001 - InitControl", BOL.Classes.EHRSessions.ClinicId, BOL.Classes.EHRSessions.UserId, ex.Message, ex);

            }

        }

         #endregion

     }

}

 

Ascx.

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ProcedureMaster.ascx.cs"

    Inherits="abc.Web.UserControls.Patient.Management.ProcedureMaster" %>

<asp:UpdatePanel ID="upProcedureMaster" runat="server" UpdateMode="Conditional">

    <ContentTemplate>

        <div id="<%= abc.BOL.FormDetails.ClinicManagement_ProcedureMaster.ToString() %>"

            class="widget_container clearfix">

            <!-- menu bar starts -->

            <div class="wid_menu_bar clearfix">

                <div class="right">

                    <div class="left">

                        <img src='<%=ResolveUrl("~/App_Themes/Bari_Default/images/wid_menubar_left.png") %>'

                            alt="Icon bar left image" /></div>

                    <div class="wid_icons left">

                        <ul>

                            <li><a id="lnkFilter" href="javascript:void(0);" runat="server">

                                <img id="imgFilter" src="~/App_Themes/Bari_Default/images/filter_ico.png" alt="Filter"

                                    title="Filter" class="v_middle" runat="server" />&nbsp;<asp:Label ID="lblFilter"

                                        runat="server" Text="Filter"></asp:Label></a></li>

                            <li><a href="javascript:void(0);" id="lbtnPrint" runat="server">

                                <img id="imgPrint" src="~/App_Themes/Bari_Default/images/print_ico.png" alt="Print"

                                    title="Print" class="v_middle" runat="server" />&nbsp;<asp:Label ID="lblPrint" runat="server"

                                        Text="Print"></asp:Label></a></li>

                            <li><a id="lnkProcedureMasterAdd" href="javascript:void(0);" runat="server" style="display: none">

                                <img id="imgAdd" src="~/App_Themes/Bari_Default/images/add_ico.png" alt="Add" title="Add"

                                    class="v_middle" runat="server" />&nbsp;<asp:Label ID="lblAdd" runat="server" Text="Add"></asp:Label></a></li>

                        </ul>

                    </div>

                </div>

            </div>

            <!-- menu bar ends -->

            <!-- widget content starts -->

            <div id="pop_middle_Management_ProcedureMaster" class="wid_middle" runat="server">

                <!-- Custom fields starts -->

                <table class="table_container">

                    <tr>

                        <td class="pop_col_width">

                            <telerik:RadGrid ID="rgdProcedureMaster" runat="server" AllowPaging="True" GridLines="Vertical"

                                AutoGenerateColumns="False" EnableEmbeddedSkins="False" Skin="BariRC" AllowSorting="True"

                                AllowFilteringByColumn="True" PageSize="5" OnItemDataBound="rgdProcedureMaster_ItemDataBound"

                                CellSpacing="0" OnItemCommand="rgdProcedureMaster_ItemCommand" EnableViewState="True">

                                <GroupingSettings CaseSensitive="false" />

                                <SortingSettings EnableSkinSortStyles="false" />

                                <ClientSettings>

                                    <ClientEvents OnFilterMenuShowing="FilterMenuShowing" />

                                </ClientSettings>

                                <MasterTableView DataKeyNames="Id"  EnableColumnsViewState="False">

                                    <Columns>

                                        <telerik:GridButtonColumn UniqueName="ibtnEdit" HeaderText="Edit" ImageUrl="~/App_Themes/Bari_Default/images/edit_ico.png"

                                            ButtonType="ImageButton" Visible="False" FilterImageToolTip="" />

                                        <telerik:GridButtonColumn UniqueName="ibtnDelete" HeaderText="Delete" ImageUrl="~/App_Themes/Bari_Default/images/delete_ico.png"

                                            ButtonType="ImageButton" Visible="False" CommandName="Delete" ConfirmDialogType="RadWindow"

                                            FilterImageToolTip="" />

                                    </Columns>

                                </MasterTableView>

                                <HeaderContextMenu CssClass="GridContextMenu GridContextMenu_BariRC" EnableEmbeddedSkins="False">

                                </HeaderContextMenu>

                            </telerik:RadGrid>

                        </td>

                    </tr>

                </table>

            </div>

            <!-- widget content ends -->

        </div>

        <input id="hdnFilter" type="hidden" value="" runat="server" />

        <div style="display: none">

            <asp:Button ID="btnReloadButton" runat="server" Style="display: none" OnClick="btnReloadButton_Click" /></div>

    </ContentTemplate>

</asp:UpdatePanel>

 

 

 

4 Answers, 1 is accepted

Sort by
0
Princy
Top achievements
Rank 2
answered on 16 Sep 2011, 07:04 AM
Hello Vijay,

You cannot add Columns at runtime and design time at a time to perform operations like filtering,sorting etc,either you have to add all columns at runtime or all at design time.

Thanks,
Princy.
0
VIJAY
Top achievements
Rank 1
answered on 16 Sep 2011, 07:11 AM
hi princy
columns on which i m performing sorting and filtering ,have added at run time only.the columns which i have added at design are buttoncolumns they do not have to do anything with sorting and filtering
0
Pavlina
Telerik team
answered on 20 Sep 2011, 07:56 AM
Hi Vijay,

Please keep in mind that RadGrid does not support mixing declarative grid columns with grid columns added dynamically at runtime. You should either create all the columns in the grid programmatically, or else define them all in the ASPX file. Refer to the help article below for more information:
http://www.telerik.com/help/aspnet-ajax/grid-programmatic-creation.html

Kind regards,
Pavlina
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now
0
Pavlina
Telerik team
answered on 20 Sep 2011, 08:26 AM
Hi Vijay,

Please keep in mind that RadGrid does not support mixing declarative grid columns with grid columns added dynamically at runtime. You should either create all the columns in the grid programmatically, or else define them all in the ASPX file. Refer to the help article below for more information:
http://www.telerik.com/help/aspnet-ajax/grid-programmatic-creation.html

Kind regards,
Pavlina
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now
Tags
Grid
Asked by
VIJAY
Top achievements
Rank 1
Answers by
Princy
Top achievements
Rank 2
VIJAY
Top achievements
Rank 1
Pavlina
Telerik team
Share this question
or