为什么我无法访问此ASP控件

时间:2017-09-15 12:16:17

标签: c# asp.net telerik telerik-grid

我正在使用Telerik RadGrid并使用EditItemTemplate,如下面的ASP代码所示。

<telerik:GridTemplateColumn UniqueName="TemplateColumn" HeaderText="Role">
            <ItemTemplate>
                <asp:Label ID="lblRole" runat="server"
                    Text='<%# DataBinder.Eval(Container.DataItem, "Role") %>'>
                </asp:Label>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:DropDownList ID="ddl1" runat="server" UniqueName="Roles"/>
            </EditItemTemplate>
        </telerik:GridTemplateColumn

我正在尝试使用此C#代码使用Entity Framework填充下拉列表:

protected void gvMembers_ItemDataBound(object sender, GridItemEventArgs e)
    {
        var roles = (from c in DbContext.roles
                     select new { c.Role1, c.RoleID }).ToList();
        GridEditableItem item = e.Item as GridEditableItem;

        //// access/modify the edit item template settings here
        DropDownList list = item.FindControl("Roles") as DropDownList;
        list.DataTextField = "Role1";
        list.DataValueField = "RoleID";
        list.DataBind();

    }

我得到一个&#34;对象引用未设置为对象的实例。&#34;因为我对编程比较陌生,所以我对这个错误消息感到难过,在我看来,我无法找到Roles控件。我试图使用Control ID put得到相同的结果。我花了很多时间试图解决这个问题,所以对此有任何帮助都会很棒。

2 个答案:

答案 0 :(得分:0)

我不确定你作为这个方法的发件人得到了什么。 但是,例如,如果它是一个按钮,你可以替换这一行

GridEditableItem item = e.Item as GridEditableItem;

这一行

Button item = (Button) sender;

和这一行

DropDownList list = item.FindControl("Roles") as DropDownList;

这一行

DropDownList list = item.NamingContainer.FindControl("Roles") as DropDownList;

因为item为null,所以不能将它与.FindControl一起使用

将Button替换为调用方法

答案 1 :(得分:0)

我已经弄明白了这个问题。问题是代码是在错误的时间运行的。我试图访问EditItemTemplate中的控件,该控件仅在项目处于editmode时可用。更改我的代码以检查模式后,它现在可以工作。这是更正后的代码

protected void gvMembers_ItemDataBound(object sender, GridItemEventArgs e)
    {

        if (e.Item is GridEditableItem && e.Item.IsInEditMode)
        {
            var roles = (from c in DbContext.roles
                         select new { c.Role1, c.RoleID }).ToList();
            GridEditableItem item = e.Item as GridEditableItem;
            // access/modify the edit item template settings here
            DropDownList list = item.FindControl("List1") as DropDownList;
            list.DataSource = roles;
            list.DataBind();
        }

    }