如何在Telerik GridTemplateColumn中为asp下拉列表绑定数据

时间:2017-09-14 17:51:04

标签: c# asp.net telerik

我有这个Telerik RadGrid

        <telerik:RadGrid ID="gvMembers" runat="server"
        AutoGenerateColumns="false"
        OnNeedDataSource="gvMembers_NeedDataSource"
        AllowSorting="true"
        AllowPaging="true"
        PageSize="10"
        AllowAutomaticUpdates="true"
        AllowAutomaticInserts="true"
        AllowAutomaticDeletes="true"
        OnItemCreated="gvMembers_ItemCreated"
        OnItemInserted="gvMembers_ItemInserted"
        OnPreRender="gvMembers_PreRender"
        OnInsertCommand="gvMembers_InsertCommand"
        OnItemDataBound="gvMembers_ItemDataBound"
        OnUpdateCommand="gvMembers_UpdateCommand"
        OnDeleteCommand="gvMembers_DeleteCommand"

        >
        <HeaderStyle CssClass="GridHeader" />
        <PagerStyle Mode="NextPrevNumericAndAdvanced" />
        <MasterTableView AutoGenerateColumns="false" DataKeyNames="UserID" CommandItemDisplay="Top" InsertItemPageIndexAction="ShowItemOnCurrentPage">
            <Columns>
                <telerik:GridEditCommandColumn></telerik:GridEditCommandColumn>
                <telerik:GridBoundColumn DataField="UserID" HeaderText="UserID" ReadOnly="true" UniqueName=""></telerik:GridBoundColumn>
                <telerik:GridCheckBoxColumn DataField="Valid" HeaderText="Active" SortExpression="Valid" UniqueName="valid"></telerik:GridCheckBoxColumn>
                <telerik:GridBoundColumn DataField="FirstName" HeaderText="First Name" SortExpression="FirstName" UniqueName="firstname"></telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="FirstName" HeaderText="Last Name" SortExpression="LastName" UniqueName="lastname"></telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="UserName" HeaderText="User Name" SortExpression="UserName" UniqueName="username"></telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="EmailAddress" HeaderText="Email" SortExpression="EmailAddress" UniqueName="email"></telerik:GridBoundColumn>

                <telerik:GridTemplateColumn UniqueName="TemplateColumn" HeaderText="Role">
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server"
                            Text='<%# DataBinder.Eval(Container.DataItem, "Role") %>'>
                        </asp:Label>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:DropDownList ID="ddlRole" runat="server" DataTextField="Role1" DataValueField="RoleID"></asp:DropDownList>
                    </EditItemTemplate>
                </telerik:GridTemplateColumn>
                <telerik:GridButtonColumn ConfirmText="Delete this Member?" ConfirmDialogType="RadWindow"
                    ConfirmTitle="Delete" ButtonType="PushButton" Text="Delete" CommandName="Delete" />
            </Columns>
        </MasterTableView>
    </telerik:RadGrid>

如您所见,我有一个用户角色的ASP DropDownList。我现在需要将数据库Role表值绑定到此下拉列表。

我已尝试使用此代码来完成此操作:

DropDownList ddl = (DropDownList)e.Item.FindControl("ddlRole");
ddl.SelectedValue = (string)DataBinder.Eval(e.Item.DataItem, "Role1").ToString();

但是我在第二行得到一个null异常错误。当我检查DropDownList ddl的值时,它显示为null。看起来它没有找到ID = ddlRole的DropDownList。关于问题可能是什么建议?

1 个答案:

答案 0 :(得分:1)

我想出答案就是我用的代码。

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();
        }

    }