Telerik RadGrid не отображается при первой загрузке страницы, но при обратной передаче - PullRequest
2 голосов
/ 17 марта 2010

У меня есть страница с раскрывающимся списком. На основании выбора в раскрывающемся списке данные загружаются и заполняют RadGrid. Я использую пользовательский элемент управления для EditTemplate, поэтому я не могу использовать radGrid.DataBind (). Вместо этого мне нужно использовать radGrid.MasterTableView.Rebind () в сочетании с обработчиком событий NeedDataSource.

Моя проблема заключается в том, что при первоначальной загрузке страницы я заполняю раскрывающийся список и автоматически выбираю значение (первый элемент в списке), которое запускает привязку данных в RadGrid. Я могу просмотреть код в режиме отладки и увидеть, что сетка заполняется данными, но когда страница отображается, она не отображается. Когда я затем вручную выбираю элемент из выпадающего списка, который вызывает тот же код привязки к сетке, он отображается правильно во второй раз.

Как получить отображение сетки при первой загрузке страницы?

Ответы [ 2 ]

1 голос
/ 01 апреля 2011

У меня очень похожая проблема с вложенной Multipage с 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();
    }
  }
}
0 голосов
/ 18 марта 2010

Я не могу ответить, ПОЧЕМУ это происходило, но решение, которое работает для меня, это привязать сетку к 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";
}

Вид извилистого решения, но оно работает.

...