如何在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>
上面的代码不会在表中显示当前值,也不会填充下拉列表(它是空的)。
抱歉回答我自己的问题,但当我得到它的工作…我用了@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
事件给出的枚举值。