Могу ли я использовать DataGridView в службе Windows? - PullRequest
0 голосов
/ 13 октября 2011

Я создал приложение Windows Forms, которое генерирует отчеты, и оно прекрасно работает. Он связывает кучу DataTables с кучей DataGridViews, экспортирует результирующее отображение в растровое изображение, и все довольны. Я хотел бы создать службу, которая генерирует эти отчеты автоматически, вместо того, чтобы запускать каждый отчет вручную в приложении на основе форм. Я сталкиваюсь с проблемой, когда у меня есть DataTable со строками в нем, но когда я назначаю его источником данных для одного из моих DataGridViews, число строк в DataGridView остается равным нулю.

Вот фрагмент соответствующего кода, к которому я привязываю эти данные (пока он не обновляется):

DataGridView testGrid = new DataGridView();
testGrid.BackgroundColor = Color.Yellow;

for (int i = ServerTableDay.Count - 1; i >= 0; i--)
{
testGrid.DataSource = ServerTableDay[i];
}

В тестовой сетке всегда есть ноль строк, независимо от того, какую таблицу я пытаюсь связать, используя .DataSource =

Чего мне не хватает, или это вообще возможно в Windows Service?

Ответы [ 3 ]

1 голос
/ 13 октября 2011

Хотя это и не идеально, вы можете использовать DataGridView внутри службы Windows (просто обратитесь к System.Windows.Forms).Я только что проверил в сервисном приложении, и оно отлично работает.Я говорю «не идеально», потому что с DataGridView связано много накладных расходов, большая часть которых заключается в том, что этот элемент управления является действительно визуальным элементом управления, который не требуется в приложении службы Windows.

Реальный вопрос: к какому типу объектов относится ServerTableDay?Это не System.Data.DataTable (как вы намекаете), потому что вы не можете получить доступ к индексу (например, ServerTableDay [i]) для DataTable, подобного этому.Кроме того, при отладке убедитесь, что в вашем объекте ServerTableDay есть данные.

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

В зависимости от вашего заголовка - Нет, вы не сможете использовать DataGridView со службой Windows, поскольку это элемент управления пользовательского интерфейса, а служба Windows не будет иметь элемента управления пользовательским интерфейсом.При этом вы, возможно, захотите записать свой вывод в файл журнала, если хотите отслеживать его.

Что касается текущей проблемы настройки winforms, попробуйте -

if (ServerTableDay.Count > 0) {
     testGrid.DataSource = ServerTableDay;
}
0 голосов
/ 13 октября 2011

Просто попробуйте

testGrid.DataSource = ServerTableDay;

Я не думаю, что вам нужно делать цикл. На самом деле вы не должны делать петли. Просто скажите datagridview, что его источник данных - ваш источник данных.

...