2

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

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

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

4

2 回答 2

1

我在 RadGrid 中使用 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>

在我的情况下,只有Rebind()在父网格的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();
    }
  }
}
于 2011-04-01T18:13:05.293 回答
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";
}

一种令人费解的解决方案,但它有效。

于 2010-03-17T21:28:33.957 回答