2013-08-29 4 views
0

У меня есть пользовательский элемент управления, в котором у меня есть RadGrid с динамическим TemplateField, поскольку они динамические. Я использую собственный собственный класс, наследующий от ITemplate. Код ниже:Ссылка на страницу/управление из класса ITemplate

public class ApplicationHeaderTemplateItem : ITemplate 
    { 
     private string colName; 
     public ApplicationHeaderTemplateItem(string cName) 
     { 
      colName = cName; 
     } 

     public void InstantiateIn(Control container) 
     { 

      HtmlTable tb = new HtmlTable(); 
     HtmlTableRow headerRow = new HtmlTableRow(); 


     //Create the textbox to display the percentage 
     HtmlTableCell percentCell = new HtmlTableCell(); 
     RadNumericTextBox txt = new RadNumericTextBox(); 
     txt.ID = "txt" + colName; 
     txt.DataBinding += txt_DataBinding; 
     txt.AutoPostBack = true; 
     txt.TextChanged += txt_TextChanged; 
     percentCell.Controls.Add(txt); 
     headerRow.Cells.Add(percentCell); 

     --snip-- 
     } 

     void txt_TextChanged(object sender, EventArgs e) 
     { 

     } 

    } 

Как вы можете видеть, у меня есть событие TextChanged для моего текстового поля. Моя проблема заключается в том, что метод создается в контексте класса ApplicationHeaderTemplateItem, поэтому я не могу получить доступ к каким-либо элементам управления в моем пользовательском элементе управления. Есть ли способ, которым я могу это сделать?

ответ

0

Используйте аргумент sender, чтобы получить TextBox, тогда вы уже находитесь, так как каждый элемент управления имеет Page property.

void txt_TextChanged(object sender, EventArgs e) 
{ 
    Control txt = (Control) sender; 
    Page page = txt.Page; 
} 
+0

Это было бы здорово, но поскольку мне нужно получить объект управления пользователем, это не сработает. I.e ниже: Приложения app = (Приложения) ((Контрольный) отправитель) .Page; дает мне Невозможно преобразовать тип «System.Web.UI.Page» до «» Project.JobControls.Applications – Chris

+0

Так 'Project.JobControls.Applications' является' UserControl' что 'TextBox' сидит? Попробуйте '(Project.JobControls.Applications) txt.NamingContainer;' –

+0

Да, это то, где находится текстовое поле, и содержит метод, который я хочу вызвать – Chris

Смежные вопросы