ASPXRichedit 无法将 byte[] 隐式转换为 System.IO.Stream

ASPXRichedit cannot implicity convert byte[] to System.IO.Stream

我正在使用 Devexpress 控件:aspxichedit 遵循此源代码: https://github.com/DevExpress-Examples/how-to-use-aspxrichedit-to-edit-rtf-data-in-aspxgridviews-editform-t260978/blob/15.1.5%2B/CS/Default.aspx.cs

并在代码处:

protected void re_Init(object sender, EventArgs e) {
    ASPxRichEdit richEdit = sender as ASPxRichEdit;
    GridViewEditItemTemplateContainer container = richEdit.NamingContainer as GridViewEditItemTemplateContainer;

    string documentID = GetDocumentID(container.Grid);
    if (!OpenedCanceledDocumentIDs.Contains(documentID)) {
        OpenedCanceledDocumentIDs.Add(documentID);
    }

    if (container.Grid.IsNewRowEditing) {
        richEdit.DocumentId = documentID;
        return;
    }

    //for text in db
    string rtfText = container.Grid.GetRowValues(container.VisibleIndex, "RtfContent").ToString();

    //for binary in db
    //byte[] rtfBinary = (byte[])container.Grid.GetRowValues(container.VisibleIndex, "RtfContent");

    richEdit.Open(documentID, DocumentFormat.Rtf, () => {
        //for text in db
        return Encoding.UTF8.GetBytes(rtfText);

        //for binary in db
        //return rtfBinary;
    });
}

在return编码。UTF8.GetBytes(rtfText);

当所有在线文档都使用 byte[] 打开控件中的文档时,我一直收到错误 'Cannot implicity convert byte[] to System.IO.Stream'。

会发生什么?为什么我的字节数组不被接受?

出现问题是因为 ASPxRichEdit.Open() 的第三个参数需要 return 类型的 System.IO.Stream 类型,如 this reference, but you're passing byte array with GetBytes() 中提供的:

public void Open( 
   string documentId,  
   DocumentFormat format,  
   Func<Stream> contentAccessorByStream // => requires return type of stream
)

要解决此问题,请尝试在 return 之前将该字节数组转换为流,如下例所示:

richEdit.Open(documentID, DocumentFormat.Rtf, () => {
    //for text in db
    var byteArray = Encoding.UTF8.GetBytes(rtfText);
    var stream = new MemoryStream(byteArray); // convert to stream

    return stream;
});

相关问题:

How do I convert struct System.Byte byte[] to a System.IO.Stream object in C#?