添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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
                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">
        Welcome to ASP.NET!
        To learn more about ASP.NET visit <a href="http://www.asp.net" target="_blank" rel="external nofollow"  title="ASP.NET Website">www.asp.net</a>.
        You can also find <a href="http://go.microsoft.com/fwlink/?LinkID=152368&clcid=0x409" target="_blank" rel="external nofollow" 
            title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.
    <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;
版权声明:本文为CSDN博主「riverlau」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/riverlau/article/details/7163423

Raise event from user control to main page / Event delegation from user control to aspx page in ASP.

asp.net server object assembly Default.aspxOnOutSourceUCDropDownList1_SelectedIndexChangedDefault.aspx.csWebControlPageWebControlcsPage