2

DevExpress MVC Pivot Grid を使用しており、レイアウトの読み込みと保存に関するいくつかの問題を解決しようとしています。これまでのところ、次のものがあります。

次のようにPivotGridSettingsでCustomActionRouteValuesを設定しました。

CustomActionRouteValues = new { Controller = "Home", Action = "PivotGridCustomCallback" },

これは次のことを示しています。

public ActionResult PivotGridCustomCallback(string action, string reportName)
{
    if (string.IsNullOrEmpty(reportName))
    {
        reportName = "Report 1";
    }

    var settings = PivotGridLayoutHelper.DefaultPivotGridSettings;
    if (action == "Save")
    {
        // TODO: Find a better solution than this. At the moment, if Save is called once, it is then called again every time the user changes the layout.. which is why we have the 'saved' variable here.
        bool saved = false;
        settings.AfterPerformCallback = (sender, e) =>
        {
            if (saved)
            {
                return;
            }
            SaveLayout(((MVCxPivotGrid)sender).SaveLayoutToString(), reportName);
            saved = true;
        };
    }
    else if (action == "Load")
    {
        // TODO: Find a better solution than this. At the moment, if Load is called once, it is then called again every time the user changes the layout.. which is why we have the 'loaded' variable here.
        bool loaded = false;
        string layoutString = LoadLayout(reportName);
        if (!string.IsNullOrEmpty(layoutString))
        {
            settings.BeforeGetCallbackResult = (sender, e) =>
            {
                if (loaded)
                {
                    return;
                }
                ((MVCxPivotGrid)sender).LoadLayoutFromString(layoutString, PivotGridWebOptionsLayout.DefaultLayout);
                loaded = true;
            };
        }
    }

    ViewBag.PivotSettings = settings;
    return PartialView("PivotPartial");
}

コード コメントでわかるように、問題は、アクションを 1 回だけ実行した後、何らかの変更を加えるたびに呼び出されることです。たとえば...レポートをロードするとします..それでいいのですが、何かを展開したり、フィールドを追加したり、何かを実行したりしても、UIで何も起こらないようです..そして、それが原因であることがわかりましたすぐに、このコードが再度呼び出されます。

settings.BeforeGetCallbackResult = (sender, e) =>
                {
                    ((MVCxPivotGrid)sender).LoadLayoutFromString(layoutString, PivotGridWebOptionsLayout.DefaultLayout);
                };

保存されたレイアウトに値をリセットし続けるだけです。つまり、何かを変更しようとしても、UI が応答していないように見えます。これが、すでにロードされているかどうかを確認するために、loadedというブール変数を持っている理由です。それは機能します..しかし、それは醜いハックです..ユーザーがピボットグリッドで何かを行うたびに、サーバーへの不要なトリップを行っているためです。

これらのアクションが常に発生するのを防ぐ方法があるに違いありません。

4

0 に答える 0