我有一个带下拉菜单的页面。根据下拉列表中的选择,数据将被加载并填充RadGrid。我正在使用EditTemplate的自定义用户控件,所以我不能使用radGrid.DataBind()。相反,我必须使用与NeedDataSource事件处理程序关联的radGrid.MasterTableView.Rebind()。
我的问题是,当我最初加载页面时,我填充下拉列表并自动选择一个值(列表中的第一项)触发RadGrid上的数据绑定。我可以在调试模式中单步执行代码并看到网格正在填充数据,但是当页面显示时,它不会被渲染。然后,当我从下拉列表中手动选择一个项目时,会触发相同的网格数据绑定代码,第二次正确显示。
如何在第一次加载页面时显示网格?
答案 0 :(得分:1)
我在RadGrid
中使用嵌套的Multipage和RadGrid有一个非常类似的问题的aspx:
<telerik:RadTabStrip><Tabs><!-- ... --></Tabs></telerik:RadTabStrip>
<telerik:RadMultiPage>
<telerik:RadPageView>
<!-- ChildRadGrid1 doesn't display on first time but does on postback -->
<telerik:RadGrid ID="ChildRadGrid1"><!-- ... --></telerik:RadGrid>
<telerik:RadPageView>
</telerik:RadMultiPage>
</NestedViewTemplate>
<!-- Columns... -->
</MasterTableView>
</telerik:RadGrid>
在我的情况下,只有父网格的 ItemCommand 中的重新绑定()可以帮助我:
aspx.cs:
class MyPage : Page
{
protected void RadGrid1_ItemCommand(object source, GridCommandEventArgs e)
{
if (e.CommandName == RadGrid.ExpandCollapseCommandName && e.Item is GridDataItem)
{
var dataItem = e.Item as GridDataItem;
// rebiding fix situation
(dataItem.ChildItem.FindControl("ChildRadGrid1") as RadGrid).Rebind();
}
}
}
答案 1 :(得分:0)
我无法回答为什么会发生这种情况,但适用于我的解决方案是将网格绑定到ObjectDataSource。
<asp:ObjectDataSource ID="gridData" runat="server"/>
我已经将网格绑定到页面上的属性,该属性是List类型的集合:
protected List<EquipmentGridItem> GridItems { get; set; }
为了使用ObjectDataSource,我创建了一个包装器方法来返回列表。
public object GetGridData()
{
return GridItems;
}
然后我将网格绑定到对象数据源。
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
grdUnits.DataSourceID = "gridData";
gridData.TypeName = typeof (ReservationEdit).ToString();
gridData.SelectMethod = "GetGridData";
}
有点复杂的解决方案,但它确实有效。