This code example demonstrates how to save and restore ASPxRichEdit documents from a database using a Binary column.
Use the Open to load a document and call the SaveCopy method to save changes.
It is also possible to handle the Saving event to save a document by clicking the ribbon’s built-in Save button.
See Also:
MVC Version:
T352035: RichEdit - How to save and load documents from a database
View Example
<%@ Page Language ="C#" AutoEventWireup ="true" CodeBehind ="Default.aspx.cs" Inherits ="ASPxRichEditBinding.Default" %>
<%@ Register Assembly ="DevExpress.Web.ASPxRichEdit.v15.2, Version=15.2.11.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace ="DevExpress.Web.ASPxRichEdit" TagPrefix ="dx" %>
<%@ Register Assembly ="DevExpress.Web.v15.2, Version=15.2.11.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace ="DevExpress.Web" TagPrefix ="dx" %>
<!DOCTYPE html >
<html xmlns ="http://www.w3.org/1999/xhtml" >
<head runat ="server" >
<title > </title >
</head >
<body >
<form id ="form1" runat ="server" >
<dx:ASPxRichEdit ID ="RichEdit" runat ="server" WorkDirectory ="~\App_Data\WorkDirectory" OnSaving ="RichEdit_Saving" > </dx:ASPxRichEdit >
<dx:ASPxButton ID ="OpenFromStreamBtn" runat ="server" Text ="Open from Stream" OnClick ="OpenFromStreamBtn_Click" > </dx:ASPxButton >
<dx:ASPxButton ID ="OpenFromByteArrayBtn" runat ="server" Text ="Open from Byte Array" OnClick ="OpenFromByteArrayBtn_Click" > </dx:ASPxButton >
<dx:ASPxButton ID ="SaveButton" runat ="server" Text ="Save" OnClick ="SaveButton_Click" > </dx:ASPxButton >
<asp:SqlDataSource ID ="SqlDataSource1" runat ="server" ConnectionString ="<%$ ConnectionStrings:DocumentsConnectionString %>" OnUpdating ="SqlDataSource1_Updating" SelectCommand ="SELECT * FROM [Docs]" UpdateCommand ="UPDATE [Docs] SET [DocBytes] = @DocBytes WHERE [Id] = @Id" >
<UpdateParameters >
<asp:Parameter Name ="DocBytes" />
<asp:Parameter Name ="Id" />
</UpdateParameters >
</asp:SqlDataSource >
</form >
</body >
</html >
using System ;
using System.Data ;
using System.IO ;
using System.Web.UI ;
using System.Web.UI.WebControls ;
using DevExpress.Web.Office ;
using DevExpress.XtraRichEdit ;
namespace ASPxRichEditBinding {
public partial class Default : System .Web .UI .Page {
string SessionKey = "EditedDocuemntID" ;
protected string EditedDocuemntID {
get { return (string )Session[SessionKey] ?? string .Empty; }
set { Session[SessionKey] = value ; }
}
protected void SaveButton_Click (object sender, EventArgs e ) {
RichEdit.Save();
}
protected void OpenFromStreamBtn_Click (object sender, EventArgs e ) {
if (!string .IsNullOrEmpty(EditedDocuemntID)) {
DocumentManager.CloseDocument(DocumentManager.FindDocument(EditedDocuemntID).DocumentId);
EditedDocuemntID = string .Empty;
}
DataView view = (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty);
EditedDocuemntID = view.Table.Rows[0 ]["Id" ].ToString();
if (view.Count != 0 )
RichEdit.Open(
EditedDocuemntID,
DocumentFormat.Rtf,
() => {
byte [] docBytes = (byte [])view.Table.Rows[0 ]["DocBytes" ];
return new MemoryStream(docBytes);
}
);
}
protected void OpenFromByteArrayBtn_Click (object sender, EventArgs e ) {
if (!string .IsNullOrEmpty(EditedDocuemntID)) {
DocumentManager.CloseDocument(DocumentManager.FindDocument(EditedDocuemntID).DocumentId);
EditedDocuemntID = string .Empty;
}
DataView view = (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty);
if (view.Count != 0 )
EditedDocuemntID = view.Table.Rows[0 ]["Id" ].ToString();
RichEdit.Open(
EditedDocuemntID,
DocumentFormat.Rtf,
() => { return (byte [])view.Table.Rows[0 ]["DocBytes" ]; }
);
}
protected void RichEdit_Saving (object source, DocumentSavingEventArgs e ) {
e.Handled = true ;
SqlDataSource1.Update();
}
protected void SqlDataSource1_Updating (object sender, SqlDataSourceCommandEventArgs e ) {
e.Cancel = RichEdit.DocumentId == string .Empty;
e.Command.Parameters["@Id" ].Value = RichEdit.DocumentId;
e.Command.Parameters["@DocBytes" ].Value = RichEdit.SaveCopy(DocumentFormat.Rtf);
}
}
}
<%@ Page Language ="vb" AutoEventWireup ="true" CodeBehind ="Default.aspx.vb" Inherits ="ASPxRichEditBinding.Default" %>
<%@ Register Assembly ="DevExpress.Web.ASPxRichEdit.v15.2, Version=15.2.11.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace ="DevExpress.Web.ASPxRichEdit" TagPrefix ="dx" %>
<%@ Register Assembly ="DevExpress.Web.v15.2, Version=15.2.11.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace ="DevExpress.Web" TagPrefix ="dx" %>
<!DOCTYPE html >
<html xmlns ="http://www.w3.org/1999/xhtml" >
<head runat ="server" >
<title > </title >
</head >
<body >
<form id ="form1" runat ="server" >
<dx:ASPxRichEdit ID ="RichEdit" runat ="server" WorkDirectory ="~\App_Data\WorkDirectory" OnSaving ="RichEdit_Saving" > </dx:ASPxRichEdit >
<dx:ASPxButton ID ="OpenFromStreamBtn" runat ="server" Text ="Open from Stream" OnClick ="OpenFromStreamBtn_Click" > </dx:ASPxButton >
<dx:ASPxButton ID ="OpenFromByteArrayBtn" runat ="server" Text ="Open from Byte Array" OnClick ="OpenFromByteArrayBtn_Click" > </dx:ASPxButton >
<dx:ASPxButton ID ="SaveButton" runat ="server" Text ="Save" OnClick ="SaveButton_Click" > </dx:ASPxButton >
<asp:SqlDataSource ID ="SqlDataSource1" runat ="server" ConnectionString ="<%$ ConnectionStrings:DocumentsConnectionString %>" OnUpdating ="SqlDataSource1_Updating" SelectCommand ="SELECT * FROM [Docs]" UpdateCommand ="UPDATE [Docs] SET [DocBytes] = @DocBytes WHERE [Id] = @Id" >
<UpdateParameters >
<asp:Parameter Name ="DocBytes" />
<asp:Parameter Name ="Id" />
</UpdateParameters >
</asp:SqlDataSource >
</form >
</body >
</html >
Imports System
Imports System.Data
Imports System.IO
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports DevExpress.Web.Office
Imports DevExpress.XtraRichEdit
Namespace ASPxRichEditBinding
Partial Public Class [Default ]
Inherits System.Web.UI.Page
Private SessionKey As String = "EditedDocuemntID"
Protected Property EditedDocuemntID() As String
Get
Return If (DirectCast (Session(SessionKey), String ), String .Empty)
End Get
Set (ByVal value As String )
Session(SessionKey) = value
End Set
End Property
Protected Sub SaveButton_Click(ByVal sender As Object , ByVal e As EventArgs)
RichEdit.Save()
End Sub
Protected Sub OpenFromStreamBtn_Click(ByVal sender As Object , ByVal e As EventArgs)
If Not String .IsNullOrEmpty(EditedDocuemntID) Then
DocumentManager.CloseDocument(DocumentManager.FindDocument(EditedDocuemntID).DocumentId)
EditedDocuemntID = String .Empty
End If
Dim view As DataView = DirectCast (SqlDataSource1.Select (DataSourceSelectArguments.Empty), DataView)
EditedDocuemntID = view.Table.Rows(0 )("Id" ).ToString()
If view.Count <> 0 Then
RichEdit.Open(EditedDocuemntID, DocumentFormat.Rtf, Function ()
Dim docBytes() As Byte = CType (view.Table.Rows(0 )("DocBytes" ), Byte ())
Return New MemoryStream(docBytes)
End Function )
End If
End Sub
Protected Sub OpenFromByteArrayBtn_Click(ByVal sender As Object , ByVal e As EventArgs)
If Not String .IsNullOrEmpty(EditedDocuemntID) Then
DocumentManager.CloseDocument(DocumentManager.FindDocument(EditedDocuemntID).DocumentId)
EditedDocuemntID = String .Empty
End If
Dim view As DataView = DirectCast (SqlDataSource1.Select (DataSourceSelectArguments.Empty), DataView)
If view.Count <> 0 Then
EditedDocuemntID = view.Table.Rows(0 )("Id" ).ToString()
End If
RichEdit.Open(EditedDocuemntID, DocumentFormat.Rtf, Function () CType (view.Table.Rows(0 )("DocBytes" ), Byte ()))
End Sub
Protected Sub RichEdit_Saving(ByVal source As Object , ByVal e As DocumentSavingEventArgs)
e.Handled = True
SqlDataSource1.Update()
End Sub
Protected Sub SqlDataSource1_Updating(ByVal sender As Object , ByVal e As SqlDataSourceCommandEventArgs)
e.Cancel = RichEdit.DocumentId = String .Empty
e.Command.Parameters("@Id" ).Value = RichEdit.DocumentId
e.Command.Parameters("@DocBytes" ).Value = RichEdit.SaveCopy(DocumentFormat.Rtf)
End Sub
End Class
End Namespace