ASPXRichedit не может конвертировать байты [] в System.IO.Stream. - PullRequest
0 голосов
/ 14 декабря 2018

Я использую элемент управления 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;
    });
}

При возврате Encoding.UTF8.GetBytes (rtfText);

Я продолжал получать сообщение об ошибке «Невозможно преобразовать байты [] в System.IO.Stream», когда во всех онлайновых документах используется байт [] для открытия документа в элементе управления.

Что может происходить?Почему мой байтовый массив не принимается?

1 Ответ

0 голосов
/ 14 декабря 2018

Проблема возникла из-за того, что третий параметр ASPxRichEdit.Open() ожидает тип возвращаемого значения типа System.IO.Stream, как указано в этой ссылке , но вы передаете байтовый массив с GetBytes():

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

Чтобы устранить эту проблему, попробуйте преобразовать этот байтовый массив в поток перед его возвратом, как показано в примере ниже:

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;
});

Связанная проблема:

Как мне преобразовать struct System.Byte byte [] в объект System.IO.Stream в C #?

...