【问题标题】:Rendering image in BandedGridColumn from MySQL Blob field从 MySQL Blob 字段的 BandedGridColumn 中渲染图像
【发布时间】:2012-12-03 11:12:04
【问题描述】:

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

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

到目前为止,我能够创建每个控件并加载所需的任何类型的数据,包括图像,使用常见的 MySqlDataReaderDataSet 方法,通过 Grid Control DataSource 属性,它拥有BandedGridView.

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

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

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

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

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

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

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

对此我最大的感谢,真的。

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

【问题讨论】:

    标签: c# mysql devexpress


    【解决方案1】:

    毕竟这并没有那么难,而且似乎希望很好,DevExpress 完成了大部分工作。

    因此,为了帮助那些有类似问题的人,您必须执行以下操作,这样您就可以在某个列中显示存储在 Blob 类型字段中的图像。

    假设您已经将数据加载到您的网格中并且除了图像之外它正在正确显示。

    首先:您必须声明一个RepositoryItemImageEdit 类型对象,该对象将简单地在单元格中实现ImageEdit 类型控件,当您尝试编辑单元格值时,它将显示您的图像,这个问题的目标。如果您的目标在这一点上有所不同,只需阅读此答案后的注释即可。

    第二:您必须将之前最后声明的对象添加到您的GridControl.RepositoryItems 集合属性中。您可以使用Add 方法轻松完成。

    第三:现在您必须定义将使用哪种类型的控件来为您的图像列呈现数据,因为您可以简单地引用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;
    

    如果您的数据已正确加载并且您的列已正确分配给各自的字段,那么这应该会在您的 Image 列的每个单元格上呈现一个小图标,并且一旦您单击或关注它,就会呈现一个 ImageEdit 控件并展示你的形象。

    注意:

    除了ImageEdit 之外,还有其他控件能够渲染图像,对于其他控件,您必须找到 他们的RepositoryItem 基于实现。

    另外,您的图片列必须是可编辑的,否则这种方法将无法 工作。请记住,如果在视图级别通过OptionsBehavior.Editable 属性拒绝编辑,则在列级别允许编辑将不起作用。

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

    【讨论】:

      猜你喜欢
      • 2022-07-29
      • 2019-01-25
      • 2012-10-17
      • 1970-01-01
      • 2012-11-08
      • 2015-02-05
      • 1970-01-01
      • 2019-11-08
      • 2013-04-29
      相关资源
      最近更新 更多