2012-12-02 37 views
0

我有一些圖像存儲在MySQL InnoDB數據庫中的Blob類型字段中,以及與存儲在其他字段中的圖像有關的其他信息。從MySQL Blob字段中呈現BandedGridColumn中的圖像

正如你所知,在DevExpress 11.2版中分發的Banded Grid ViewBanded Grid Columns的幫助下,能夠呈現多種類型的數據,最顯着的是圖像。

到目前爲止,我能夠創建的每一個控制和加載任何所需的數據,包括圖片,採用了常見的MySqlDataReaderDataSet方法,通過Grid ControlDataSource財產,擁有該BandedGridView

但是,正如你所知道的那樣,當你從MySQL加載Blob字段時,你將返回一個帶有文件內容的字節數組,這裏是所討論的圖像。

我希望DevExpress能夠識別二進制數據,並意識到它是一個圖像文件,並自動渲染圖像列下的所有行分配處理數據庫Image字段,但它沒有,現在我認爲它可能是很遙遠的希望。

而不是渲染圖像,該列的每一行顯示一個簡單的字符串輸出引用該字段包含的對象的類型。在這種情況下,由於它是一個文件的二進制表示,它輸出System.Byte[]

我已經搜索了DevExpress文檔,並且通常在網絡上找不到可以解決我的問題的任何明確信息。在WinForms - > XtraGrid部分的下方,有一個我期望的結果與DevExpress一起打包,一個名爲「GridMainDemo」的解決方案。一旦運行演示,切換到備用視圖並進入帶狀網格視圖,然後只需點擊圖片欄下的任意一行,就可以看到我想要的結果的清晰示例。

當然,我已經看過該演示的源代碼,但我不能說澄清和解釋是構建此類演示的DevExpress團隊的明確目標,而且很遺憾,我沒有太多時間來看待它深深地。然而從我看到的這個演示不同於圖像本地存儲爲文件這一點,並且已經在某種存儲庫中正確引用,這對我的問題沒有多大幫助。

爲了完成我的問題,對於長時間的閱讀感到抱歉,只是想清楚地知道我的目標是什麼,阻礙什麼,以及如何設置所有的東西以便找到達到我的目標的方法。

簡而言之,一個簡單的例子就是如何將圖像從MySQL Blob字段加載到Banded Grid View中的列中,並在加載後或者當用戶單擊字段單元格時呈現它,這將是理想的,並且能夠理解並且做必要的代碼,以便我的視圖也呈現我的圖像。

我非常感謝,真的。

注意:不幸的是,使用本地甚至遠程存儲的文件不是 的一個選項。圖像必須保存在數據庫的限制範圍內。

回答

0

畢竟它並不那麼難,而且看起來希望是好的地方,DevExpress完成了大部分工作。

因此,爲了幫助那些有類似問題的人,這裏是你必須做的事情,所以你可以有一個列顯示存儲在Blob類型字段中的圖像。

假設您已經將數據加載到您的網格,並且它正在正確顯示,當然圖像除外。

第一:您必須聲明RepositoryItemImageEdit類型的對象,將簡單地實現在電池,它試圖在編輯的單元格的值,它會顯示你的圖像ImageEdit類型的控制,這個問題的目標。如果你的目標在這一點上有所不同,那麼只需在此答案之後閱讀註釋。

第二個:您必須將先前最後聲明的對象添加到您的GridControl.RepositoryItems集合屬性中。您可以使用Add方法輕鬆完成。

三:現在你必須定義將使用哪種類型的控制來呈現數據,你image列,爲您簡單的參考BandedGridColumn.ColumnEdit屬性等於你之前剛剛添加的對象。

/* Create your columns, bands etc manually or 
have it done automatically after loading the data.*/ 
... 
// Load the data from the database to your gridControl 
... 
// Step one 
RepositoryItemImageEdit imageControl = new RepositoryItemImageEdit(); 
// Step two 
gridControl.RepositoryItems.Add(imageControl); 
// Step three 
/* view is the View assigned to your grid control 
where your data and columns are being shown.*/ 
// Assuming your database blob field is named `Image` 
view.Columns["Image"].ColumnEdit = imageControl; 

如果你的數據是正確加載並正確分配到各自的領域你列那麼這應該呈現一個小圖標上的圖像列的每個細胞,一旦你點擊或重點它,一個ImageEdit控件將被渲染並顯示你的圖像。

注:

有除了能夠呈現圖像的ImageEdit,對於那些別人,你將不得不尋找 他們RepositoryItem根據實施其他控制。

此外,您的圖像列必須是可編輯的,否則此方法將不會 工作。請記住,如果在視圖級別通過OptionsBehavior.Editable屬性拒絕允許在列級別編輯將無法正常工作。

我會將我的答案標記爲正確的,因爲沒有人提供任何關於如何解決我的問題的見解,但是歡迎您發佈任何其他解決此問題的工作方法。謝謝。