In RadGrid, How to get the control inside usercontrol

How can we use javascript to get the control inside user control in RadGrid?

Problem: control in user control will share the same ID, so if we use "var cmb= rows[5].findControl("RadComboBox1")" will get only one RadComboBox1. 

So how can we deal with that? The solution will be add additional HiddenField to store the RadComboBox1 client ID, then use $find(hiddenfield.value) to get the real control. Here is the example:

User Control

WebUserControl1.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" 
Inherits="TelerikGridFindControlInColumn.WebUserControl1" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>

<telerik:RadComboBox ID="RadComboBox1" runat="server">
</telerik:RadComboBox>
WebUserControl1.ascx.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;

namespace TelerikGridFindControlInColumn
{
    public partial class WebUserControl1 : System.Web.UI.UserControl
    {
        public RadComboBox RCB
        {
            get
            {
                return this.RadComboBox1;
            }
        }

       
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        public void AddItem(string text, string value)
        {
            RCB.Items.Add(new RadComboBoxItem(text, value));
        }
    }
}


Test Page
Default.aspx

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="TelerikGridFindControlInColumn._Default" %>
 
<%@ Register Src="~/WebUserControl1.ascx" TagName="WebUserControl1" TagPrefix="uc" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
<script type="text/javascript">
    function GridCreated() {
        var grid = $find("<%=RadGrid1.ClientID %>");
        var MasterTable = grid.get_masterTableView();
        var rows = MasterTable.get_dataItems();
//        console.log(rows[5])
//        console.log(rows[5].get_cell('def'))
//        console.log(rows[5].get_cell('def'))

//        console.log(rows[5].findElement('div_RadComboBox1'))
//        console.log($find('ctl00_MainContent_RadGrid1_ctl00_ctl04_RadComboBox1'));
//        var cmbbycol = $telerik.findControl(rows[5].get_cell('def'), "RadComboBox1");
//        var cmbbycol2 = $telerik.findControl(rows[5].findElement('div_RadComboBox1'), "RadComboBox1");
//        //var cmbbycol3 = $telerik.findControl(MasterTable.getColumnByUniqueName("def"), "RadComboBox1");
//        var cmbbyrow = rows[5].findControl("RadComboBox1");
//        alert(cmbbycol.get_value());
//        alert(cmbbycol2.get_value());
//       // alert(cmbbycol3.get_value());
        //        alert(cmbbyrow.get_value());
        var abc_radcombobox1 = rows[5].findElement('abc_RadComboBox1');
        var ghi_radcombobox1 = rows[5].findElement('ghi_RadComboBox1');
        console.log($find(abc_radcombobox1.value));
        console.log($find(ghi_radcombobox1.value));
        console.log($find(abc_radcombobox1.value).get_value());
        console.log($find(ghi_radcombobox1.value).get_value());
    }
</script>
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>
        Welcome to ASP.NET!
    </h2>
    <p>
        To learn more about ASP.NET visit <a href="http://www.asp.net" title="ASP.NET Website">www.asp.net</a>.
    </p>
    <p>
        You can also find <a href="http://go.microsoft.com/fwlink/?LinkID=152368&clcid=0x409"
            title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.
    </p>

    <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
    </telerik:RadScriptManager>
    <telerik:RadGrid ID="RadGrid1" runat="server" 
        onitemdatabound="RadGrid1_ItemDataBound">
         <MasterTableView AutoGenerateColumns="true">
         <Columns>
            <telerik:GridTemplateColumn HeaderText="abc" UniqueName="def" >
                <ItemTemplate>
                    <asp:HiddenField ID="abc_RadComboBox1" runat="server" />
                    <uc:WebUserControl1 ID="uc1" runat="server"></uc:WebUserControl1>
                </ItemTemplate>
            </telerik:GridTemplateColumn>
            <telerik:GridTemplateColumn HeaderText="ghi" UniqueName="jkl">
                <ItemTemplate>
                    <asp:HiddenField ID="ghi_RadComboBox1" runat="server" />
                    <uc:WebUserControl1 ID="uc2" runat="server"></uc:WebUserControl1> 
                </ItemTemplate>
            </telerik:GridTemplateColumn>
        </Columns>
         </MasterTableView>
          <ClientSettings>
            <ClientEvents OnGridCreated="GridCreated" />
        </ClientSettings>
    </telerik:RadGrid>
    
</asp:Content>

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;

namespace TelerikGridFindControlInColumn
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            List<SampleEntity> list = new List<SampleEntity>();
            for (int i = 0; i < 20; i++)
            {
                SampleEntity s = new SampleEntity("City" + i
                    , "PostalCode" + i
                    , "ContactName" + i);
                list.Add(s);
            }

            RadGrid1.DataSource = list;
            RadGrid1.DataBind();
        }

        protected void RadGrid1_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e)
        {
            if (e.Item.ItemType == Telerik.Web.UI.GridItemType.Item || e.Item.ItemType == Telerik.Web.UI.GridItemType.AlternatingItem)
            {
                HiddenField abc_radcombobox1 = e.Item.FindControl("abc_RadComboBox1") as HiddenField;
                WebUserControl1 uccmb1 = e.Item.FindControl("uc1") as WebUserControl1;
                HiddenField ghi_radcombobox1 = e.Item.FindControl("ghi_RadComboBox1") as HiddenField;
                WebUserControl1 uccmb2 = e.Item.FindControl("uc2") as WebUserControl1;


                abc_radcombobox1.Value = uccmb1.RCB.ClientID;
                ghi_radcombobox1.Value = uccmb2.RCB.ClientID;

                /*sample data*/
                uccmb1.AddItem("aaaaaaa", "0");
                uccmb1.AddItem("bbbbbbb", "1");
                uccmb2.AddItem("ccccccc", "2");
                uccmb2.AddItem("ddddddd", "3");
                
            }
        }
    }

    public class SampleEntity
    {
        public string City { get; set; }
        public string PostalCode { get; set; }
        public string ContactName { get; set; }
        public SampleEntity(string city, string postalCode, string contactName)
        {
            City = city;
            PostalCode = postalCode;
            ContactName = contactName;
        }

    }  
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值