[英]Binding a RadCombobox inside a radgrid
请有人指出我正确的方向,我在 radgrid 中有一个 radcombobox,一旦我编辑该行,它就会失去它的价值
<telerik:GridTemplateColumn DataField="SupplierRegion" UniqueName="SupplierRegion" HeaderText="Region">
<ItemTemplate>
<asp:HyperLink runat="server" ID="SupplierRegionHyperlink" Text='<%# Eval("SupplierRegion")%>'></asp:HyperLink>
</ItemTemplate>
<EditItemTemplate>
<telerik:RadComboBox runat="server" ID="SupplierRegionRadComboBox" EnableLoadOnDemand="true" AutoPostBack="true" >
<WebServiceSettings Method="GetRegions" Path="~/WebServices/SuppliersWS.asmx"></WebServiceSettings>
</telerik:RadComboBox>
</EditItemTemplate>
</telerik:GridTemplateColumn>
下面是我的 C# 代码
if (e.CommandName == "Edit")
{
GridEditCommandColumn editColumn = (GridEditCommandColumn)SupplierSearchGrid.MasterTableView.GetColumn("EditCommandColumn");
if (!editColumn.Visible)
editColumn.Visible = true;
GridEditableItem item = (GridEditableItem)e.Item;
RadComboBox SupplierRegionValue = (RadComboBox)item.FindControl("SupplierRegionRadComboBox");
SupplierRegionValue.SelectedValue = e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["RegionID"].ToString();
SupplierRegionValue.Text = e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["Description"].ToString();
}
在我的编辑中,它似乎找不到 Combobox,因为它返回 null
查看主题如何将数据绑定到网格 EditItemTemplate 内的 radcombobox
XAML
<telerik:GridTemplateColumn DataField="SupplierRegion" UniqueName="SupplierRegion" HeaderText="Region">
<ItemTemplate>
<asp:HyperLink runat="server" ID="SupplierRegionHyperlink" Text='<%# Eval("SupplierRegion")%>'></asp:HyperLink>
</ItemTemplate>
<EditItemTemplate>
<telerik:RadComboBox runat="server" ID="SupplierRegionRadComboBox" EnableLoadOnDemand="true" AutoPostBack="true" >
<WebServiceSettings Method="GetRegions" Path="~/WebServices/SuppliersWS.asmx"></WebServiceSettings>
</telerik:RadComboBox>
</EditItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridEditCommandColumn FooterText="EditCommand footer" UniqueName="EditCommandColumn"
HeaderText="Edit" HeaderStyle-Width="100px" UpdateText="Update">
</telerik:GridEditCommandColumn>
C#
protected void gvSupplierRegion_ItemDataBound(object sender, GridItemEventArgs e)
{
if (e.Item is GridDataItem)
{
GridDataItem myGridItem = (GridDataItem)e.Item;
if (myGridItem.IsInEditMode)
{
RadComboBox combo = (RadComboBox)myGridItem["SupplierRegion"].FindControl("SupplierRegionRadComboBox");
combo.DataSource = GetUploadStatus();
combo.DataTextField = "Value";
combo.DataValueField = "Key";
combo.DataBind();
combo.SelectedValue = DataBinder.Eval(myGridItem.DataItem, "UploadStatus").ToString();
}
}
所以对于那些有同样问题的人,我找到了解决方案
在 aspx 页面中,在数据键名中添加 web 服务的 id 和描述列 id,然后在 radcombobox 的 edititemtemplate 中
<telerik:GridTemplateColumn DataField="SupplierRegion" UniqueName="SupplierRegion" HeaderText="Region">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"Description")%>'
</ItemTemplate>
<EditItemTemplate>
<telerik:RadComboBox runat="server" ID="SupplierRegionRadComboBox" AllowCustomText="false" EnableLoadOnDemand="true" AutoPostBack="true" Text='<%#Bind("Description") %>' >
<WebServiceSettings Method="GetRegions" Path="~/WebServices/SuppliersWS.asmx"></WebServiceSettings>
</telerik:RadComboBox>
</EditItemTemplate>
</telerik:GridTemplateColumn>
在后面的代码中
protected void SuppliersSearchRadGrid2_ItemDataBound(object sender, GridItemEventArgs e)
{
if (e.Item.IsInEditMode)
{
GridEditableItem editItem = (GridEditableItem)e.Item;
RadComboBox combo = (RadComboBox)editItem.FindControl("SupplierRegionRadComboBox");
combo.SelectedValue = DataBinder.Eval(editItem.DataItem, "RegionID").ToString();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.