2

私のページ (productionEntry.aspx) には、radGrid の非同期ポストバックを許可する設定の radAjaxManager を含む radGrid があります。

<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
    <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="RadGridProductionOrders">
            <UpdatedControls>
                <telerik:AjaxUpdatedControl ControlID="RadGridProductionOrders" />
            </UpdatedControls>
        </telerik:AjaxSetting>
    </AjaxSettings>
</telerik:RadAjaxManager>

したがって、RadGridProduictionOrders は非同期にポストバックしますが、これは問題ありません。

しかし、現在、radGrid の editForm はポップアップ ユーザー コントロールであり、私が達成したいことは、ユーザー コントロールのコンテンツの一部を非同期的にポストバックすることです。私はこれを radAjaxManagerProxy と radAjaxPanel を一緒に使用して、ユーザー コントロール内でそれぞれ単独で実行しようとしました。productionEntry.aspx ページの radAjaxManager の設定に従って、ページが非同期にポストバックするたびに。

これは、ユーザー コントロール内の radAjaxManagerProxy のマークアップでした。ポストバックしたいコンテンツは、Panel1 内にありました。

<telerik:RadAjaxManagerProxy ID="RadAjaxManagerProxy1" runat="server">
<AjaxSettings>
    <telerik:AjaxSetting AjaxControlID="Panel1">
        <UpdatedControls>
            <telerik:AjaxUpdatedControl ControlID="Panel1" />
        </UpdatedControls>
    </telerik:AjaxSetting>
</AjaxSettings>

必要なことを達成するために、ページやユーザー コントロールをどのように設定する必要がありますか?

4

2 に答える 2

1

この問題についてテレリックに問い合わせたところ、不可能であるという回答がありました。

編集フォームはポップアップ ウィンドウにありますが、まだ RadGrid の一部です。サーバー上では、ポップアップ コントロールは RadGrid の一部としてレンダリングされるため、RadGrid の不可欠な部分です。これを念頭に置いて、RadGrid は全体として更新する必要がある複合コントロールであることを知っているため、残念ながら RadAjaxManager ではあなたの要件を達成できませんでした。ポストバックは常に RadGrid によって行われ、編集フォームの値を閉じてリセットする RadGrid を常に更新する必要があります。

うまくいけば、これは他の人を助けるでしょう...

于 2013-03-22T12:58:53.360 に答える
1

しばらく経ちましたが、これが私が構築したものであり、私が行ったことです。

データ入力パネルとしてグリッドがありました-編集モードで3つの固定行。ビジネスが戻ってきて、同じデータの「履歴を表示」ビューを要求する可能性が非常に高いため、変更から身を守るために (固定テーブルではなく) グリッドを構築したかったのです。

GridBoundColumn を使用する代わりに、次のように edititemtemplate で GridTemplate 列を使用しました。

<EditItemTemplate>
    <telerik:RadTextBox runat="server" ID="Address1" Text='<%#Bind("Address1") %>' OnTextChanged="Address1_OnTextChanged" AutoPostBack="True"></telerik:RadTextBox>
    <asp:UpdatePanel runat="server"><Triggers><asp:AsyncPostBackTrigger ControlID="Address1"/></Triggers></asp:UpdatePanel>
</EditItemTemplate>

これにより、フロント エンドにグラフィカルな変更を加えたり、ユーザー エクスペリエンスを中断したりすることなく、行ごと、テキスト ボックスごとに単純なデータバインド コールバックを行うことができます。これにより、ページに追加のオーバーヘッドが発生しますが、無視できるはずです。

コードビハインドは次のようになります。

protected void Address1_OnTextChanged(object sender, EventArgs e)
    {
        //Find which row you're on
        var id = ((sender as RadTextBox).Parent.Parent as GridDataItem).GetDataKey("ID");
        //Do whatever you need to do with the data by using the ID to match.
        myList[id].Address1 = (sender as RadTextBox).Text;
    }

編集: 他のロジックが関与していない状況で、ビューがモデルと直接対話できる監視プレゼンター パターンを使用しています。別のことをしている場合、これには追加のオーバーヘッドが必要になる場合があります。

于 2013-07-22T20:55:54.820 に答える