2

ドロップダウンのあるページがあります。ドロップダウンでの選択に基づいて、データがロードされ、RadGrid に入力されます。EditTemplate にカスタム ユーザー コントロールを使用しているため、radGrid.DataBind() を使用できません。代わりに、NeedDataSource イベント ハンドラと関連付けて radGrid.MasterTableView.Rebind() を使用する必要があります。

私の問題は、ページを最初にロードするときに、ドロップダウンを入力し、RadGrid でデータバインディングをトリガーする値 (リストの最初の項目) を自動的に選択することです。デバッグ モードでコードをステップ実行すると、グリッドにデータが取り込まれていることがわかりますが、ページが表示されてもレンダリングされません。次に、ドロップダウンから項目を手動で選択すると、同じグリッド データバインディング コードがトリガーされ、2 回目は正しく表示されます。

ページが最初にロードされたときにグリッドを表示するにはどうすればよいですか?

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>

私の場合、親グリッドのItemCommandのRebind )のみが役に立ちます。

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"/>

リスト型のコレクションであるページのプロパティにグリッドを既にバインドしていました。

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 に答える