#c# #wpf #reportviewer
#c# #wpf #reportviewer
Вопрос:
У меня есть форматированное текстовое поле с именем rtb
, данные которого вставляются в таблицу SQL следующим образом:
private void insertdata(object sender, RoutedEventArgs e)
{
string name = nameofstudent.Text;
string father = fatherofstudent.Text;
string id = stud_id.Text;
string gender;
if (male.IsChecked == true)
{
gender = "M";
}
else
gender = "F";
var richTextBoxContent = new TextRange(this.rtb.Document.ContentStart, this.rtb.Document.ContentEnd);
string Place = richTextBoxContent.Text;
connect();
con.Open();
string saved = "insert into student_details (Student_ID,Student_Name,Father_Name,Gender,Address)values('"
id "', '" name "','" father "','" gender "','" Place "')";
SqlCommand cmd = new SqlCommand(saved, con);
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("record is added");
}
чтобы изменить формат форматированного текстового поля, у меня есть кнопка, которая изменит любое выделенное слово на жирный.
private void changefont(object sender, RoutedEventArgs e)
{
TextSelection text = rtb.Selection;
if (!text.IsEmpty)
{
text.ApplyPropertyValue(RichTextBox.FontWeightProperty, FontWeights.Bold);
}
else
{
text.ApplyPropertyValue(RichTextBox.FontWeightProperty, FontWeights.Normal);
}
}
У меня есть кнопка, которая генерирует отчет в программе просмотра отчетов.
private void reportviewing(object sender, RoutedEventArgs e)
{
ReportDataSource reportDataSource = new ReportDataSource();
connect();
con.Open();
SqlDataAdapter adp = new SqlDataAdapter("select * from student_details", con);
DataTable newtab = new DataTable();
adp.Fill(newtab);
reportDataSource.Name = "DataSet1";
reportDataSource.Value = newtab;
studentreport.LocalReport.ReportPath = "C:\Users\Alice Luver\Documents\Visual Studio 2012\Projects\STDNT\STDNT\studentsreport.rdlc";
studentreport.LocalReport.DataSources.Add(reportDataSource);
studentreport.LocalReport.Refresh();
studentreport.RefreshReport();
}
Это также работает.
Моя проблема в том, что я не могу сохранить форматы.
Например, я хочу сохранить форматированное текстовое поле как: «Привет, я Алиса«
Оно сохраняется и отображается как: «Привет, я Алиса» без жирного шрифта.
Как я могу это решить? Спасибо
Комментарии:
1. Вы также должны сохранить эту метаинформацию. В настоящее время вы извлекаете только обычный текст из
RichTextBox
и отбрасываете текстовые атрибуты. Информация о том, выделен ли текст жирным шрифтом, хранится в контейнере,TextElement
напримерRun
илиSpan
. Либо извлеките полные элементыFlowDocument
, либо создайте индекс, который можно использовать для преобразования обычного текста обратно в форматированный текст.
Ответ №1:
Вы можете использовать TextRange.Save
и TextRange.Load
для сохранения / загрузки форматированного содержимого из FlowDocument
. При сохранении содержимого в формате RTF сохраняется информация о форматировании.
private async Task SaveAndLoadRtfDocumentExampleAsync()
{
// Select some text
var textRange = new TextRange(this.RichTextBox.Document.ContentStart, this.RichTextBox.Document.ContentEnd);
// Convert the FlowDocument selection to a RTF string
string rtfText;
using (var outputStream = new MemoryStream())
{
textRange.Save(outputStream, DataFormats.Rtf);
outputStream.Position = 0;
using (var streamReader = new StreamReader(outputStream))
{
rtfText = await streamReader.ReadToEndAsync();
}
}
StoreInDatabase(rtfText);
rtfText = LoadFromDatabase();
// Convert the RTF string to a FlowDocument of an existing RichTextBox
var newTextRange = new TextRange(this.RichTextBox.Document.ContentStart, this.RichTextBox.Document.ContentEnd);
using (var inputStream = new MemoryStream(Encoding.UTF8.GetBytes(rtfText)))
{
newTextRange.Load(inputStream, DataFormats.Rtf);
}
}