2012-12-02 39 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属性拒绝允许在列级别编辑将无法正常工作。

我会将我的答案标记为正确的,因为没有人提供任何关于如何解决我的问题的见解,但是欢迎您发布任何其他解决此问题的工作方法。谢谢。