Отображение юникода в Microsoft reporting
После перехода с VB6 на Vb.NET за последние 12 месяцев или около того я начал переносить наши устаревшие отчеты Crystal Reports 8.5 в Microsoft Reporting (VS2015) - однако многие наши отчеты отображают русский, китайский, арабский и другие международные наборы символов.
Мы медленно переходим от SQL2000 (да, он такой старый) к более новой версии SQL Server, как только проект будет завершен, но до тех пор мне приходится переносить разделы проекта в .NET (я медленно изучаю C#, делая это) - но я только что наткнулся на камень преткновения в чем-то, от чего я не могу получить решение, и это (и я не могу поверить, что он не поддерживается сразу же, так что это должен быть я), и это MS Reporting не поддерживает Unicode для этих других наборов символов. Я либо пропустил что-то ослепительно очевидное с MSR, либо Microsoft сбросила огромный лязг.
Я попробовал изменить шрифт (у меня есть стандартные шрифты, установленные через Win10, которая является моей операционной системой разработки) и попробовал MS Gothic UI и Segui UI - gothic имел частичный успех, некоторые китайские иероглифы были преобразованы, но частичный недостаточно хорош. Кажется, у меня нет MS Arial Unicode - просто Arial, но я бы подумал, что эти другие именованные шрифты "UI" будут поддерживать его (я могу заставить winforms правильно отображать эти символы в Datagridview, поэтому я знаю, что шрифт поддерживает то, что мне уже нужно).
Поэтому обычно мой код вызывает RDLC, иногда с параметрами, иногда без них. Пример кода приведен ниже. SQL вводится через набор данных, поэтому он является динамическим внутри приложения. Я могу просматривать китайский/русский язык напрямую через Средство просмотра запросов SQL 2000.
Dim ReportViewerScreen As New Reporting ReportViewerScreen.Show() ReportViewerScreen.ReportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local ReportViewerScreen.ReportViewer1.Reset() ReportViewerScreen.ReportViewer1.LocalReport.DataSources.Clear() ReportViewerScreen.ReportViewer1.LocalReport.ReportEmbeddedResource = "MyReport.rdlc" Dim sReportDataSource = New Microsoft.Reporting.WinForms.ReportDataSource() sReportDataSource.Name = "DataSet1" sReportDataSource.Value = ds.Tables(0) ReportViewerScreen.ReportViewer1.LocalReport.DataSources.Add(sReportDataSource) ReportViewerScreen.ReportViewer1.LocalReport.EnableExternalImages = True ReportViewerScreen.ReportViewer1.LocalReport.EnableHyperlinks = True ReportViewerScreen.ReportViewer1.RefreshReport() ReportViewerScreen.ReportViewer1.Show()
Я надеялся, что будет какая-то команда или метод, которые я пропустил, чтобы заставить это работать, 100% в любом наборе символов. Поля Ntext Fields (и nvarchar) в SQL2000 все имели N' вставок/обновлений, поэтому я знаю, что символы правильны (и видны) в SQL2000, как и мое предыдущее утверждение выше. Пожалуйста, помогите! Спасибо
Что я уже пробовал:
изменение шрифтов, поиск в Google unicode поддержка microsoft reporting
[no name]
Пожалуйста, сообщите нам, на какую версию sql server происходит ваша миграция.
Richard Deeming
Хранятся ли ваши данные в виде nvarchar
, или как varchar
с определенной сортировкой?
Member 12561559
nvarchar для небольших полей, таких как имена, ntext для больших блоков текстов (менее 3000 символов), но на разных языках, Что касается сортировки, я предполагаю, что это все, что по умолчанию (британский английский). Я только что попробовал накормить вручную вставленный кусочек китайского языка (выглядит нормально) . vb.net в качестве параметра текстовое поле должно идти прямо в отчет, минуя любые данные sql server - и оно все равно выходит в квадратах, так что его определенно ничто не связывает с сортировкой на SQL.