0

我有许多图像存储在BlobMySQL InnoDB 数据库内的类型字段中,以及与存储在另一个字段中的这些图像有关的其他信息。

如您所知,在 DevExpress 版本 11.2 中分发的带状网格视图,在带状网格列的帮助下,能够呈现多种类型的数据,尤其是图像。

到目前为止,MySqlDataReader我能够DataSet通过拥有 .DataSourceBandedGridView

但是,如您所知,当您从 MySQL 加载 Blob 字段时,您会返回一个包含文件内容的字节数组,在本例中是相关图像。

我希望 DevExpress 能够识别二进制数据并意识到它是一个图像文件,并在分配给处理数据库字段的列下的所有行中自动渲染图像Image,但是它没有,现在我想到了,它是可能是牵强附会的希望。

不是渲染图像,列的每一行显示一个简单的字符串输出,引用字段包含的对象类型。在这种情况下,由于它是文件的二进制表示,因此它输出System.Byte[].

我搜索了 DevExpress 文档,通常在网络上,没有找到可以解决我的问题的明确内容。有一个我想要的结果与 DevExpress 一起打包的示例,该解决方案在 WinForms -> XtraGrid 部分下名为“GridMainDemo”。运行演示后,更改为 Alternate Views 和 Banded Grid View,然后只需单击图片列下的任何行,您将看到我想要的结果的清晰示例。

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

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

现在长话短说。如何将图像从 MySQL Blob 字段加载到带状网格视图中的列中并在加载后或用户单击字段单元格时呈现它的简单示例,这将是理想的,有了它我将能够理解和执行必要的代码,以便我的视图也呈现我的图像。

我最大的感谢,真的。

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

4

1 回答 1

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请记住,如果通过属性在视图级别被拒绝,则允许在列级别进行编辑将不起作用。

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

于 2012-12-03T03:12:04.910 回答