Я думаю, что это трудно (если не невозможно) достичь.
Если вы думаете о SQL-запросе в традиционном смысле, он не знает, сколько существует наборов данных и сколько времени это займет. Я не знаю ни одного инструмента SQL (например, DB Visualizer, DataGrip и т. Д.), Который показывает индикатор выполнения и правильную оценку того, сколько времени это займет, потому что он всегда будет зависеть от объема данных в таблице.
Должен быть способ измерения, когда данные загружены на 25% / 50% / 75% / .... И единственное, что может занять много времени в вашем коде, это вызов entityManager.createQuery(...)
.
Я бы предложил удалить индикатор выполнения и добавить что-то вроде счетчика, чтобы показать, что идет загрузка данных. У JFoenix есть приятный дизайнерский прядильщик материала.
Вы также можете добавить простой текст «загрузка данных ...».
Редактировать (чтобы сделать его более заметным): Как правильно подсказал @Slaw, вам также нужно поместить ваш вызов entityManager.createQuery(...)
в новый поток. В противном случае поток пользовательского интерфейса может зависнуть, когда запрос занимает больше времени.
Сделайте свое приложение для создания XML-файла с необработанными данными. Затем примените внешний XSLT к нему, который содержал бы HTML.
Подробнее: http://msdn.microsoft.com/en-us/library/14689742.aspx
Вы могли использовать движок шаблонов как NVelocity для разделения представления отчета и кода. Там существуют, вероятно, другие достойные движки шаблонов...
meziod - Другая авеню для просматривания является дополнительными методами к объекту HtmlTextWriter. Я нашел блестящий удар в просто этом на этом самом сайте.
Я уверен, что Вы могли усилить большой потенциал от этого...
отношения - coola
Ну, Вы могли использовать одну из платформ отчета (Кристалл, MS RDL, и т.д.) и экспортировать как HTML - однако, я подозреваю, что для простых данных Ваш текущий подход - меньше служебное. Я мог бы использовать XmlWriter
или LINQ-to-XML (а не string.Format
, который не обработает выход)...
new XElement("tr",
new XElement("td", item.StartDate),
new XElement("td", item.Id),
new XElement("td", item.WorkItemId),
и т.д. Выход особенно важен для текстовых значений (имя, описание, и т.д.).
Microsoft SQL Reporting Services делает это вполне хорошо и может сделать несколько форматов.
Моя компания использует его для создания отчетов PDF и так как у нас есть требования HIPAA, мы автоматически помещаем пароль в него через третье лицо управление PDF...
Вы могли бы рассмотреть использование простого движка шаблонов, такого как http://www.stefansarstedt.com/templatemaschine.html и разделить Ваш шаблон от содержания.
Это довольно практично, позволяет шаблонную модификацию, не перекомпилировав, и Вы все еще получили питание C# в своих шаблонах.