Skip to main content

SpreadsheetSettings.CustomActionRouteValues Property

Defines the custom callback routing logic by specifying the names of a Controller and an Action which should handle custom callbacks initiated by the ASPxClientSpreadsheet.PerformCallback method.

Namespace: DevExpress.Web.Mvc

Assembly: DevExpress.Web.Mvc5.v24.2.dll

Declaration

public object CustomActionRouteValues { get; set; }

Property Value

Type Description
Object

An object containing the Controller and Action names.

Remarks

Use the client ASPxClientSpreadsheet.PerformCallback method if you need to dynamically update the Spreadsheet by asynchronously going to the server (using AJAX-based callback technology) and perform server-side processing in the specified Action. Via the method’s data parameter, you can pass any information collected on the client to the server for further server processing.

The client PerformCallback method posts back to the server using the callback technology and is handled in an Action specified by the CustomActionRouteValues property. Any data passed via the method’s data parameter can be accessed on the server as a parameter of the specified Action. So, the necessary server-side actions can be performed in the handling Action based upon the value(s) passed from the client.

Example: How to modify a document

This example demonstrates how to modify a document in the Spreadsheet extension. The main idea of this approach is to perform a callback using the PerformCallback(parameter) method and modify a document in the CustomActionRouteValues action.

View Example: Spreadsheet - How to modify a document

@Html.DevExpress().Spreadsheet(settings => {
    settings.Name = "Spreadsheet";
    settings.CallbackRouteValues = new { Controller = "Home", Action = "SpreadsheetPartial" };
    settings.CustomActionRouteValues = new { Controller = "Home", Action = "CustomAction" };

    settings.Width = System.Web.UI.WebControls.Unit.Percentage(100);
    settings.Height = 500;
    settings.ReadOnly = false;
    settings.WorkDirectory = "~/Docs";
    settings.RibbonMode = SpreadsheetRibbonMode.Ribbon;

}).Open(Server.MapPath("~/Docs/testDocument1.xlsx")).GetHtml()
<script>
        function OnCommandExecuted(s, e) {
            var command = e.item.name;
            Spreadsheet.PerformCallback({ customCommand: command })
        }

</script>

@Html.DevExpress().Ribbon(settings => {
    settings.Name = "Ribbon";
    settings.ShowFileTab = false;
    settings.ShowTabs = false;
    settings.OneLineMode = true;

    settings.ClientSideEvents.CommandExecuted = "OnCommandExecuted";
    var group = settings.Tabs.Add("Home").Groups.Add("Group 0");

    group.Items.Add(MVCxRibbonItemType.ButtonItem, i => {
        i.Text = "Apply formatting";
        i.Name = "applyFormatting";
        ((RibbonButtonItem)i).LargeImage.IconID = IconID.ActionsNew32x32;
    });
    group.Items.Add(MVCxRibbonItemType.ButtonItem, i => {
        i.Text = "Insert link";
        i.Name = "insertLink";
        i.Size = RibbonItemSize.Small;

    });
    group.Items.Add(MVCxRibbonItemType.ButtonItem, i => {
        i.Text = "Draw Borders";
        i.Name = "drawBorders";
        i.Size = RibbonItemSize.Small;
    });
    group.Items.Add(MVCxRibbonItemType.ButtonItem, i => {
        i.Text = "Show total";
        i.Name = "showTotal";
        i.Size = RibbonItemSize.Small;

    });
}).GetHtml()

@using (Html.BeginForm()) {
    @Html.Action("SpreadsheetPartial")
}
public ActionResult Index() {
    return View();
}

public ActionResult SpreadsheetPartial() {
    return PartialView("_SpreadsheetPartial");
}

public ActionResult CustomAction(string customCommand) {
    IWorkbook workbook = SpreadsheetExtension.GetCurrentDocument("Spreadsheet");
    Worksheet worksheet = workbook.Worksheets[0];

    switch (customCommand) {
        case "applyFormatting":
            CellRange priceRange = worksheet.Range["C2:C15"];
            Formatting rangeFormatting = priceRange.BeginUpdateFormatting();
            rangeFormatting.Font.Color = Color.SandyBrown;
            rangeFormatting.Font.FontStyle = SpreadsheetFontStyle.Bold;
            rangeFormatting.Fill.BackgroundColor = Color.PaleGoldenrod;
            rangeFormatting.NumberFormat = "$0.0#";

            rangeFormatting.Alignment.Vertical = SpreadsheetVerticalAlignment.Center;
            rangeFormatting.Alignment.Horizontal = SpreadsheetHorizontalAlignment.Center;
            priceRange.EndUpdateFormatting(rangeFormatting);
            break;
        case "insertLink":
            worksheet.Columns["G"].WidthInPixels = 180;
            Cell cell1 = worksheet.Cells["G4"];
            cell1.Fill.BackgroundColor = Color.WhiteSmoke;
            worksheet.Hyperlinks.Add(cell1, "https://documentation.devexpress.com/OfficeFileAPI/14912/Spreadsheet-Document-API", true, "Spreadsheet Document API");
            break;
        case "drawBorders":
            CellRange tableRange = worksheet.Range["A2:E16"];
            tableRange.Borders.SetAllBorders(Color.RosyBrown, BorderLineStyle.Hair);
            break;
        case "showTotal":
            Cell cell2 = worksheet.Cells["E16"];
            cell2.Formula = "=SUBTOTAL(9,E2:E15)";
            Cell cell3 = worksheet.Cells["A16"];
            cell3.Formula = "SUBTOTAL(103,A2:A15)";
            Cell cell4 = worksheet.Cells["D16"];
            cell4.Value = "Total amount";
            break;
    }
    return SpreadsheetExtension.GetCustomActionResult("Spreadsheet");

}
See Also