如何获取对telerik的引用:来自子控件的GridTemplateColumn?

时间:2011-04-20 22:55:12

标签: asp.net telerik telerik-grid

来自页面的简化代码:

<%@ Page Language="C#" etc... %>
<%@ Register src="~/controls/RequiredField.ascx" tagname="rf" tagprefix="custom" %>

<telerik:RadGrid runat="server">
    <MasterTableView>
        <Columns>
            <telerik:GridTemplateColumn DataField="Name" HeaderText="Name" SortExpression="Name">
                <ItemTemplate><%#Eval("Name")%></ItemTemplate>                    
                <EditItemTemplate>
                    <asp:TextBox ID="NewName" runat="server" Text='<%#Bind("Name")%>'></asp:TextBox>
                    <custom:rf runat="server" />
                </EditItemTemplate>
            </telerik:GridTemplateColumn>
        </Columns>
    </MasterTableView>
</telerik:RadGrid>

在我的控制中,我想检查父项是否为EditItemTemplate,然后设置telerik:GridTemplateColumn的属性。例如:

public partial class controls_RequiredField : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (this.Parent is Telerik.Web.UI.GridEditFormItem.EditFormTableCell)
        {
            // how do I get a reference to 'Telerik.Web.UI.GridTemplateColumn' (or any other object that lets me set the header text)
            ((Telerik.Web.UI.GridTemplateColumn)this.Parent.Parent).EditFormHeaderTextFormat = "{0}:" + RequiredText.Text;
            RequiredText.Visible = false;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

我没有telerik:RadGrid,但它与MS GridView非常相似,所以我能够使用asp:GridView测试您的问题(都继承自CompositeDataBoundControl Class (System.Web.UI.WebControls)

由于您的自定义控件位于EditItemTemplate RequiredField控件的Page_Load事件,因此RadGrid切换到编辑模式后才会触发,因此您应该可以放弃if (this.Parent is...)检查,因为您知道网格处于编辑模式。

因此,通过自定义控件的页面加载指示网格处于编辑模式,您可以通过执行以下操作设置HeaderText的{​​{1}}:

GridTemplateColumn

答案 1 :(得分:0)

这是我正在使用的代码:

protected void Page_Init(object sender, EventArgs e)
{
    if (this.Parent is GridEditFormItem.EditFormTableCell)
    {
        GridEditFormItem.EditFormTableCell parentCell = (GridEditFormItem.EditFormTableCell)this.Parent;
        string col = parentCell.ColumnName;
        // ridiculous:
        Control parentFormItem = this.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent;
        if (parentFormItem is GridItem)
        {
            GridItem gi = (GridItem)parentFormItem;
            GridColumn parentColumn = gi.OwnerTableView.Columns.FindByUniqueNameSafe(col);
            if (parentColumn != null)
            {
                parentColumn.EditFormHeaderTextFormat = "{0}:" + RequiredText.Text;
                RequiredText.Visible = false;
            }
        }
    }
}

但是不得不绕过所有这些.Parent让我感到不安。