2

Telerik RadGrid を使用して、階層データを表示および編集しています。奇妙に聞こえるかもしれませんが、要件の 1 つは、親行のリンクがクリックされたときに子詳細グリッドを挿入モードで開くことです。これには 2 つのことが必要です。子グリッドの拡張と、このグリッドを挿入モードでロードします。

これは、Telerik のドキュメントの推奨事項を使用して、これまでに試したことです。ただし、これは機能せず、rebind が呼び出されると例外がスローされ、子の詳細グリッドがその linqDataSourceControl を見つけることができないというメッセージが表示されます。ただし、このコントロールは、以下のコードの実行中に存在します (私が確認しました)。

親行コマンド ボタンから挿入モードで子 DetailGridView を開くソリューションは何ですか?

マークアップ:

...
    <DetailTables>
        <telerik:GridTableView>
        ...
        <Columns>
            <ItemTemplate>
                <asp:LinkButton ID="addChildVendorRating" runat="server" CommandName="AddNewChildRating" CausesValidation="false" CssClass="normal-link" CommandArgument='<%# Eval("VendorM2MEntityToQualID")%>'>[Add Rating]</asp:LinkButton>
            </ItemTemplate>
        </Columns>
        <DetailTables>
            <!-- I Need this to be be expanded and in insert mode when addChildVendorRating command link is clicked -->
            <telerik:GridTableView>
        </<DetailTables>

コード:

protected void gridRatings_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
{
    if (e.CommandName == "AddNewChildRating") {
                GridDataItem parentRow = e.Item as GridDataItem;
                GridTableView parentGridView = parentRow.GetClosestParentControlByType<GridTableView>();
                RadGrid parentGrid = parentGridView.GetClosestParentControlByType<RadGrid>();

                parentRow.Expanded = true;
                //parentGridView.HierarchyDefaultExpanded = true;
                //parentGridView.DetailTables[0].InsertItem();
                parentGridView.DetailTables[0].IsItemInserted = true;
                parentGridView.DetailTables[0].Rebind();
    }
}
4

1 に答える 1

1

私はこれを理解しました。うまくいけば、これは他の誰かを助けるでしょう。解決策は、コマンド ハンドラー e.Item をGridDataItem;にキャストすることです。NestedTableViews- パズルの鍵にアクセスできます。これは、 とは異なり、実際にデータに関連付けられている詳細ビューですDetailTables。その上に設定しIsItemInsertedて再バインドすると、すべてが魅力のように機能します。

これにより、セクションを展開し、子セクションを挿入モードにすることができます。以下に完成したコードを示します。

    protected void gridRatings_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
    {
        if (e.CommandName == "AddNewChildRating") {
                    GridDataItem parentRow = e.Item as GridDataItem;
                    GridTableView parentGridView = parentRow.GetClosestParentControlByType<GridTableView>();

                    if (parentGridView != null)
                    {
                        var targetGridView = ((GridDataItem)e.Item).ChildItem.NestedTableViews[0];
                        if (targetGridView != null)
                        {
                            parentRow.Expanded = true;
                            targetGridView.IsItemInserted = true;
                            targetGridView.Rebind();
                        }
                    }

}
于 2012-06-29T21:46:38.777 に答える