Skip to main content

DevExpress v24.2 Update — Your Feedback Matters

Our What's New in v24.2 webpage includes product-specific surveys. Your response to our survey questions will help us measure product satisfaction for features released in this major update and help us refine our plans for our next major release.

Take the survey Not interested

Save a Document

  • 2 minutes to read

The Spreadsheet allows you to save an active document at any point in time. To initiate a save operation, send the Spreadsheet’s client state to the server within a POST request.

The example below illustrates how to send a POST request to the server once a user clicks an app’s custom Save button:

<div id="button-save"></div>
<script type="text/javascript">
    $("#button-save").dxButton({
        text: "Save",
        onClick: function (e) {
            var spreadsheetState = spreadsheet.getSpreadsheetState();
            $.ajax({
                type: 'POST',
                url: '@Url.Action("SaveDocument")',
                data: { spreadsheetState: spreadsheetState }
            });
        }
    });
</script>

@(Html.DevExpress()
    .Spreadsheet("spreadsheet")
)

On the server, use the GetSpreadsheetFromState method to access the server-side Spreadsheet object. Call this object’s Save() method to save the document that you opened from a file. If you opened a document from a byte array or stream, call the SaveCopy method overload to save the document to a file using custom storage:

public class SpreadsheetController : Controller {

    public void SaveDocument(SpreadsheetClientState spreadsheetState) {
        var spreadsheet = SpreadsheetRequestProcessor.GetSpreadsheetFromState(spreadsheetState);

        // Saves an active document back to the file you opened it from
        spreadsheet.Save();

        // Saves a copy of an active document to a file in the server's file system.
        spreadsheet.SaveCopy("your-file-path");

        // Saves a copy of an active document to a byte array
        byte[] documentContent = spreadsheet.SaveCopy(DocumentFormat.Xlsx);

        // Saves a copy of an active document to a stream
        var stream = new MemoryStream();
        spreadsheet.SaveCopy(stream, DocumentFormat.Xlsx);
    }
}

Run Demo: Open a File Run Demo: Open a Byte Array Run Demo: Open a Stream

#Enable Auto-Save Feature

The Spreadsheet can save an active document at regular intervals. Pass the On mode to the AutoSaveMode method to enable auto-save feature. Call the AutoSaveTimeout method to set the control’s auto-save timeout period:

@(Html.DevExpress().Spreadsheet("spreadsheet")
    // ...
    .AutoSaveMode(DevExpress.Web.Office.AutoSaveMode.On)
    .AutoSaveTimeout(TimeSpan.FromMinutes(3)))

The Spreadsheet cannot save the following documents:

In such instances, you need to implement custom auto-save logic in the AddAutoSaving method (to save the document):

builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.Services.AddDevExpressControls(options => {
    options.AddSpreadsheet(
        spreadsheetOptions => {
            spreadsheetOptions
                .AddAutoSaving(
                    (IDocumentInfo documentInfo, DocumentSavingEventArgs e) => {
                        byte[] documentContent = documentInfo.SaveCopy();
                        // Your custom logic to save a document
                        e.Handled = true;
                    }
                );
        }
    );
});