DevilHero 发表于 2013-10-29 16:38:08

请教各位大侠,这种效果如何实现?

devexpress版本 13.1.5,vs2010 C#开发

这是Demo里的一个GridView效果,貌似内嵌了repositoryItemImageEdit控件。
我的数据库中存放的是图片的外部路径,比如"c:\123.jpg"。请问如何在显示时点击单元格根据存储的路径加载图片并显示如下的效果?
官方Demo代码没有注释,实在是理解不能。。。

heimuheimulm 发表于 2013-10-31 17:46:47

【DevExpress】GridControl - RepositoryItemImageEdit用法
http://www.dxper.net/thread-1781-1-1.html
(出处: DXPER开发者论坛)

DevilHero 发表于 2013-10-31 23:19:00

heimuheimulm 发表于 2013-10-31 17:46
【DevExpress】GridControl - RepositoryItemImageEdit用法
http://www.dxper.net/thread-1781-1-1.html
( ...
谢谢,你的方法我看了,貌似是把图片预先载入到数据源中。不过这样在数据比较多的情况下会不会增大系统资源的占用呢?
我想实现的功能是当点击单元格时ImageEdit控件才会根据单元格存储的路径动态加载图片。研究了半天还是没找到方法。。。

heimuheimulm 发表于 2013-11-1 02:19:30

如果数据量比较大,可以采用GridView分页的方法限制一次显示的条数,达到提高用户体验和性能的方法。

nyfor 发表于 2013-11-1 13:30:17

我觉得可以利用 RepositoryItemPopupContainerEdit 这种类型.

比如:
1. 定一个 PictureBox(或是类似的图像显示编辑控件)
PictureBox _picBox = new PictureBox();
_picBox.Dock = DockStyle.Fill;
_picBox.SizeMode = PictureBoxSizeMode.Zoom;

2. 在Form_Load事件中将 _picBox 关联到列的 repositoryItemPopupContainerEdit1
   repositoryItemPopupContainerEdit1.PopupControl = new PopupContainerControl();
   repositoryItemPopupContainerEdit1.PopupControl.Controls.Add(_picBox);

3. 在 repositoryItemPopupContainerEdit1的 QueryPopUp 事件中将对应的图片内容关联到 _picBox
   假定这个栏位绑定的就是图片路径, 则
   _picBox.Image = new Bitmap(gridView1.GetFocusedValue().ToString());

DevilHero 发表于 2013-11-2 01:23:16

本帖最后由 DevilHero 于 2013-11-2 01:28 编辑

多些指点。这两天又研究了一下,目前通过ImageEdit控件的QueryPopUp事件可以实现动态加载图片,但是关闭时却出现了问题。。提示出现“对象必须实现IConvertible”, 原因貌似是因为控件加载了图片之后,关闭时会修改原单元格中的内容。因为原单元格存储的是字符串,而修改后变成了图片数据,导致类型不符的问题...

//点击单元格动态加载图片
      private void rpic_QueryPopUp(object sender, System.ComponentModel.CancelEventArgs e)
      {
            DevExpress.XtraEditors.ImageEdit ie = sender as DevExpress.XtraEditors.ImageEdit;
            //e.Cancel = ie.EditValue.ToString() == "";

            if (ie.EditValue.ToString() != "")   //判断是否存储有图片
            {
                String imgpath = Application.StartupPath + "\\img\\" + ie.EditValue.ToString();

                ie.EditValue = Image.FromFile(imgpath);
            }

      }未绑定控件时单元格内容




绑定控件后点击单元格显示:



关闭ImageEdit时的问题:




nyfor 发表于 2013-11-2 14:37:36

本帖最后由 nyfor 于 2013-11-2 14:49 编辑

如果你要使用 ImageEdit , 那么请这样:

不要使用 QueryPopup 事件,改而使用 ParseEditValue 事件

private void repositoryItemImageEdit1_ParseEditValue(object sender, DevExpress.XtraEditors.Controls.ConvertEditValueEventArgs e)
{
    if (e.Value != null && e.Value is string && e.Value.ToString() != string.Empty)
    {
      String imgpath = Application.StartupPath + "\\img\\" + e.Value.ToString();
      e.Value = Image.FromFile(imgpath);
      e.Handled = true;
    }
}

DevilHero 发表于 2013-11-2 19:07:17

nyfor 发表于 2013-11-2 14:37
如果你要使用 ImageEdit , 那么请这样:

不要使用 QueryPopup 事件,改而使用 ParseEditValue 事件


高手就是高手,厉害!!
页: [1]
查看完整版本: 请教各位大侠,这种效果如何实现?