从MySQL Blob字段渲染BandedGridColumn中的图像

时间:2012-12-02 05:04:02

标签: c# mysql devexpress

我在MySQL InnoDB数据库中的Blob类型字段中存储了许多图像,以及与存储在其他字段中的图像有关的其他信息。

如您所知,在Banded Grid View的帮助下,DevExpress版本11.2中分发的Banded Grid Columns能够呈现多种类型的数据,尤其是图像。

到目前为止,我可以使用常见的MySqlDataReaderDataSet方法,通过Grid Control {{创建每个控件并加载所需的任何数据,包括图像1}} property,拥有DataSource

但是如您所知,当您从MySQL加载Blob字段时,您将返回一个包含文件内容的字节数组,在这种情况下是相关图像。

我希望DevExpress会识别二进制数据,并意识到它是一个图像文件,并自动渲染分配给处理数据库BandedGridView字段的列下的所有行中的图像,但它现在没有我想起来,这可能是一个遥不可及的希望。

该列的每一行都显示一个简单的字符串输出,而不是呈现图像,而是引用该字段包含的对象类型。在这种情况下,由于它是文件的二进制表示,因此输出Image

我搜索了DevExpress文档,一般都在网上搜索,没有找到可以解决我问题的明确内容。有一个我想要的结果与DevExpress一起打包的例子,WinForms下的名为“GridMainDemo”的解决方案 - > XtraGrid部分。运行演示后,更改为“备用视图”和“带状网格视图”,然后只需单击图片列下的任意行,您将看到我所需结果的明确示例。

当然我已经查看了该演示的来源,但我不能说澄清和解释是构建此类演示的DevExpress团队的明确目标,不幸的是我没有太多时间去研究它深。然而,从我所看到的这个演示不同于图像作为文件存储在本地,并且已经在某种存储库中正确引用,这对我的问题没什么帮助。

为了完成我的问题,对于长时间的阅读感到抱歉,只是想清楚地了解我的目标是什么,阻碍了什么,以及如何设置所有事情以找到实现目标的方法。

现在简短地说。如何将图像从MySQL Blob字段加载到带状网格视图中的列中,并在加载后或用户单击字段单元格时进行渲染,这将是一个理想的选择,我将能够理解和做必要的代码,以便我的视图也渲染我的图像。

我非常感谢,真的。

  

注意:不幸的是,使用本地甚至远程存储的文件不是   一个选择。图像必须保存在图像的限制范围内   数据库中。

1 个答案:

答案 0 :(得分: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属性在视图级别拒绝版本,则允许在列级别进行编辑将无效。

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