Telerik RadGrid不会显示在第一个Page_Load上,而是显示在回发上

时间:2010-03-17 15:48:52

标签: asp.net telerik radgrid pageload

我有一个带下拉菜单的页面。根据下拉列表中的选择,数据将被加载并填充RadGrid。我正在使用EditTemplate的自定义用户控件,所以我不能使用radGrid.DataBind()。相反,我必须使用与NeedDataSource事件处理程序关联的radGrid.MasterTableView.Rebind()。

我的问题是,当我最初加载页面时,我填充下拉列表并自动选择一个值(列表中的第一项)触发RadGrid上的数据绑定。我可以在调试模式中单步执行代码并看到网格正在填充数据,但是当页面显示时,它不会被渲染。然后,当我从下拉列表中手动选择一个项目时,会触发相同的网格数据绑定代码,第二次正确显示。

如何在第一次加载页面时显示网格?

2 个答案:

答案 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";
}

有点复杂的解决方案,但它确实有效。