2011-10-12 141 views
0

我創建了一個生成報告的Windows窗體應用程序,效果很好。它將一堆DataTables綁定到一堆DataGridViews,將得到的顯示結果導出到位圖,並且每個人都很高興。我想創建一個自動生成這些報表的服務,而不必在我的基於表單的應用程序中手動運行每個報表。我遇到了一個問題,我有一個DataTable中有行,但是當我將它分配給我的DataGridViews的數據源時,DataGridView中的行數保持爲零。我可以在Windows服務中使用DataGridView嗎?

下面是相關的代碼中,我結合這個數據摘要(但它並沒有更新):

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

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

測試網格總是零行,無論哪個表我試圖通過使用綁定.DataSource =

我錯過了什麼,或者這甚至可能在Windows服務中?

+0

我想你是在談論Windows窗體,而不是Windows服務。 – Amry

回答

0

根據您的標題 - 不,你將不能夠使用一個DataGridView與Windows服務,因爲這是一個用戶界面控制和Windows服務就沒有UI控件。這就是說,如果你想跟蹤它,你可能會考慮將你的輸出寫入日誌文件。

至於你當前的WinForms安裝問題的嘗試 -

if (ServerTableDay.Count > 0) { 
    testGrid.DataSource = ServerTableDay; 
} 
+0

我並不想讓用戶看到它,只需在「控制檯」上顯示它就可以將它繪製到位圖上。既然這是一項服務,這是否意味着它即使不可見也不會「畫」任何東西? –

+0

到目前爲止我所提出的最好的就是你所提出的。因爲它不會工作。 –

+0

我唯一能想到的其他事情就是讓您生成一個HTML頁面,您可以查看並查看格式是否正在尋找。我不認爲我曾經使用過Windows服務的繪圖功能 - 理論上它應該可以在你創建一個位圖的時候起作用。 – gjohn

0

試試看

testGrid.DataSource = ServerTableDay; 

我不認爲你需要做一個循環。其實你不會做一個循環。只需告訴datagridview它的數據源是你的數據表。

+0

我有循環,因爲我有許多datagrids,我綁定到許多datagridviews列表。即使我做了一個datatable到單個gridview,我仍然沒有行? –

1

雖然不理想,您可以使用Windows服務中一個DataGridView(只是參考System.Windows.Forms)。我只是在服務應用程序中測試,並且工作正常。我說「不理想」,因爲DataGridView有很多開銷,其中大部分是控件是一個真正的可視化控件,這在Windows服務應用程序中並不需要。

真正的問題是:什麼類型的對象是ServerTableDay?它不是一個System.Data.DataTable(就像你提到的那樣),因爲你不能像這樣訪問DataTable的索引(例如ServerTableDay [i])。另外,在調試中驗證ServerTableDay對象中有數據。

+0

這就是我所引用的,但我無法將行放入它。 ServerTableDay是一個列表,我收集了一堆表並將其添加到我循環訪問的各種DataGridView。片段沒有說清楚,但爲了清楚起見,我省略了一些循環內容。在WinForms應用程序中效果很好。我證實行存在於我引用的ServerTableDay索引中,但GridView neved move的行數? –

+0

這也幫助我將Winforms應用程序轉換爲控制檯。 – bendecko

相關問題