你能帮我解决双向绑定问题:在表格中显示枚举值,从下拉列表中选择编辑模式中的选项吗?
<telerik:RadGrid>
<MasterTableView>
<Columns>
<telerik:GridDropDownColumn DataField="MyEnumProperty" />
</Columns>
<telerik:RadGrid>
使用上面的代码,它不会在表格中显示当前值,也不会填充下拉列表(它为空)。
答案 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
给出的枚举值事件