如何将枚举绑定到Telerik:ASP WebForms中的RadGrid

时间:2016-10-06 08:16:36

标签: c# asp.net enums telerik

你能帮我解决双向绑定问题:在表格中显示枚举值,从下拉列表中选择编辑模式中的选项吗?

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

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

2 个答案:

答案 0 :(得分:2)

很抱歉回答我自己的问题,但是当我开始工作时...... 我使用@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 :(得分:1)

你可以试试这个

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

 <telerik:RadGrid ID="grid">
            <MasterTableView>
            <Columns>
                <telerik:GridDropDownColumn UniqueName="drpColumn" DataField="MyEnumProperty" />
            </Columns>
        <telerik:RadGrid>

方法2:

 <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绑定它,因此在正常模式下它将显示来自db的数据并在编辑模式下,它将绑定从ItemDataBound给出的枚举值事件