Как сохранить RichTextBox в базе данных SQLServer в WPF с помощью Entity Framework - PullRequest
0 голосов
/ 09 октября 2018

У меня очень неприятная проблема с сохранением RichTextBox с форматированием в моей базе данных с использованием структуры сущностей.

Вот мой код:

namespace simpleton
{
    /// <summary>
    /// Interaction logic for AddNewOE.xaml
    /// </summary>
    public partial class AddNewOE : Window
    {
        //db connection
        simpletonDBEntities _db = new simpletonDBEntities();

      public AddNewOE()
      {
        InitializeComponent();
      }

       private void insertobBtn_Click(object sender, RoutedEventArgs e)
       {
          db_entry newdb_entries = new db_entry()
          {
            ReportDetails = ConvertRtbToBytes(rtfText)
          };

          _db.ob_entries.Add(newOb_entries);
          _db.SaveChanges();  
       }

        public static byte[] ConvertRtbToBytes(string richTextBox)
        {
          byte[] data = null;
          string rtfText; //string to save to db
          TextRange tr = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);
          using (MemoryStream ms = new MemoryStream())
          {
            tr.Save(ms, DataFormats.Rtf);
            rtfText = Encoding.ASCII.GetString(ms.ToArray());
          }
          return data;
        }

    }
}

Я получаюошибка в функции ConvertRtbToBytes():

«строка» не содержит определения для «Документа», и не найден доступный метод расширения «Документ», принимающий первый аргумент типа строки (вы пропустилидиректива using или ссылка на сборку?)

Я также уверен, что общий код не в порядке.

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Я наконец понял это ...

namespace simpleton
{
    /// <summary>
    /// Interaction logic for AddNewOE.xaml
    /// </summary>
    public partial class AddNewOE : Window
    {

        //db connection
      simpletonDBEntities _db = new simpletonDBEntities();

      public AddNewOE()
      {
        InitializeComponent();
      }

       private void insertobBtn_Click(object sender, RoutedEventArgs e)
       { 
          TextRange tr = new TextRange(rtbEditor.Document.ContentStart, rtbEditor.Document.ContentEnd);
          MemoryStream ms = new MemoryStream();
          tr.Save(ms, DataFormats.Rtf);
          string rtfText = Encoding.ASCII.GetString(ms.ToArray());

          db_entry newdb_entries = new db_entry()
          {
            ReportDetails = rtfText

          };

          _db.ob_entries.Add(newOb_entries);
          _db.SaveChanges();  
       }



    }
0 голосов
/ 13 октября 2018

Вы должны быть более осторожны с описанием вашей проблемы, потому что я сомневаюсь, что вы хотите сохранить RichTextBox в базе данных.Я предполагаю, что вы хотите сохранить содержимое RichTextBox в базе данных.

Сама ошибка довольно очевидна:

'строка'не содержит определения для «Документа» и не найден доступный метод расширения «Документ», принимающий первый аргумент типа string (отсутствует директива using или ссылка на сборку?)

У вас естьпараметр с именем richTextBox типа string, который вы позже попытаетесь использовать следующим образом:

public static byte[] ConvertRtbToBytes(string richTextBox)
{
    // ...
    TextRange tr = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);
    // ...
}

Итак, вы пытаетесь получить доступ к свойству Document string, но string не имеет свойства Document.Вы, вероятно, хотели сделать параметр типа RichTextBox.

При этом ваш код имеет гораздо больше недостатков и даже не скомпилируется:

В методе insertobBtn_Click:

  • rtfText используется, но никогда не определяется
  • Вы создаете переменную с именем newdb_entries, но пытаетесь сохранить одну с именем newOb_entries

Inmethod ConvertRtbToBytes:

  • Вы объявляете byte[] data = null; и возвращаете data, но data никогда не устанавливается и не заполняется данными
  • Вы определяете rtfText и назначаете некоторыеценим его, но ничего с этим не делаем
...