我正在使用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得到相同的结果。我花了很多时间试图解决这个问题,所以对此有任何帮助都会很棒。
答案 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();
}
}