如何在ASP WebForms中绑定enum和telerik:RadGrid

本文关键字:enum telerik RadGrid 绑定 ASP WebForms | 更新日期: 2023-09-27 18:11:53

你能帮我用两种方式绑定:在表中显示enum值,并从下拉列表中选择编辑模式下的选项吗?

<telerik:RadGrid>
    <MasterTableView>
    <Columns>
        <telerik:GridDropDownColumn DataField="MyEnumProperty" />
    </Columns>
<telerik:RadGrid>

上面的代码不会在表中显示当前值,也不会填充下拉列表(它是空的)。

如何在ASP WebForms中绑定enum和telerik:RadGrid

抱歉回答我自己的问题,但当我得到它的工作…我用了@Balaji的方法2,但必须做一些改进,所以要在一个地方完成:

视图部分:

<telerik:GridTemplateColumn HeaderText="My header" UniqueName="uniqueName" AllowFiltering="true">
<ItemTemplate>
    <%#DataBinder.Eval(Container.DataItem, "MyEnumProperty")%>
</ItemTemplate>
<EditItemTemplate>
    <telerik:RadComboBox name="myComboId" Id="myComboId" runat="server">
    </telerik:RadComboBox>
</EditItemTemplate>
</telerik:GridTemplateColumn>

背后的代码:

var dataItem = e.Item as GridEditFormItem;
if (dataItem != null)
{
    {
        var comboBox = dataItem.FindControl("myComboId") as RadComboBox;
        if (comboBox != null)
        {
            var value = DataBinder.Eval(dataItem.DataItem, "MyEnumProperty").ToString();
            comboBox.DataSource = Enum.GetValues(typeof(MyEnumProperty));
            comboBox.DataBind();
            var selectedItem = comboBox.FindItemByText(value);
            comboBox.SelectedIndex = selectedItem.Index;
        }
    }
}

你可以试试这个

方法1:(您不能为您的情况这样做)

 <telerik:RadGrid ID="grid">
            <MasterTableView>
            <Columns>
                <telerik:GridDropDownColumn UniqueName="drpColumn" DataField="MyEnumProperty" />
            </Columns>
        <telerik:RadGrid>
方法二:
 <telerik:GridTemplateColumn HeaderText="dropdown" UniqueName="drpColumn" AllowFiltering="true">
    <ItemTemplate>
        <%#DataBinder.Eval(Container.DataItem, "textTodisplay")%>
    </ItemTemplate>
    <EditItemTemplate>
        <telerik:RadComboBox ID="ddlForEdit" runat="server">
        </telerik:RadComboBox>
    </EditItemTemplate>
    </telerik:GridTemplateColumn>

考虑到,在类内部方法的顶部有枚举

 enum ddlElements
 {
   a, b, c, d
 };

则在GridItemDataBound事件

protected void grid_ItemDataBound(object sender, GridItemEventArgs e)
{
    if (e.Item is GridDataItem)
    {
    GridDataItem item = (GridDataItem)e.Item;
    GridEditableItem editItem = e.Item as GridEditableItem;
    if (e.Item is GridEditableItem && e.Item.IsInEditMode) // Only when the grid is in EDIT MODE
    {
RadComboBoxItem selectedItem = new RadComboBoxItem(); 
RadComboBox editor= (RadComboBox)grid["drpColumn"].FindControl("ddlForEdit");
roleName = DataBinder.Eval(myGridItem.DataItem, "drpColumn").ToString();
editor.DataSource = Enum.GetValues(typeof(ddlElements));
editor.DataBind();
selectedItem = combo.FindItemByText(roleName);
editor.SelectedIndex = selectedItem.Index;        
    }
}

或者您也可以尝试使用模板列在您的网格中创建下拉列表。

更新:

尝试模板列方法2,请删除已使用的代码。在ItemDataBound事件中编写的代码将用于编辑模式。它将只在用户单击编辑按钮时显示下拉列表。

在普通模式(非可编辑网格)默认情况下,您要么需要为特定列设置一个值,要么应该简单地将其留空。如果你有一个值从数据库,那么你可以使用DataBinder.Eval绑定它,所以在正常模式下,它将显示数据从数据库和编辑模式下,它将绑定从ItemDataBound事件给出的枚举值。