在GridControl控件上绑定图片的几种操作方式详解

2020-01-05 09:10:12于海丽

很多时候,我们需要对数据库的数据进行分页显示,以提高显示的速度和效率,那么利用分页控件就可以获得很多这样统一的界面和高效率显示数据的好处,基于分页控件的处理本质上和上面的过程差不多,不过处理的代码需要变化一下,从而可以正常的实现图片绑定显示操作。


/// <summary>
  /// 基于分页控件的图片显示案例
  /// </summary>
  public partial class FrmRepositoryItemImageEdit2 : BaseForm
  {
    public FrmRepositoryItemImageEdit2()
    {
      InitializeComponent();

      CreateGridView();
    }

    /// <summary>
    /// 创建gridView1列表所需显示的列
    /// </summary>
    private void CreateGridView()
    {
      this.winGridViewPager1.OnPageChanged += new EventHandler(winGridViewPager1_OnPageChanged);
      this.winGridViewPager1.OnRefresh += new EventHandler(winGridViewPager1_OnRefresh);
      this.winGridViewPager1.AppendedMenu = this.contextMenuStrip1;
      this.winGridViewPager1.ShowLineNumber = true;
      this.winGridViewPager1.BestFitColumnWith = false;//是否设置为自动调整宽度,false为不设置
      this.winGridViewPager1.gridView1.DataSourceChanged += new EventHandler(gridView1_DataSourceChanged);
    }

    /// <summary>
    /// 绑定数据后,分配各列的宽度
    /// </summary>
    private void gridView1_DataSourceChanged(object sender, EventArgs e)
    {
      //对图片路径的列,重新使用RepositoryItemPictureEdit类型
      //然后对该列的控件的ParseEditValue和FormatEditValue函数进行实现,从而实现路径到图片的显示
      var edit = this.winGridViewPager1.gridView1.Columns.ColumnByFieldName("ImageFilePath").CreatePictureEdit();      
      edit.ParseEditValue += (s, se) =>
      {
        if (se.Value != null && se.Value.GetType() == typeof(string) && se.Value.ToString() != string.Empty)
        {
          if (File.Exists(string.Concat(se.Value)))
          {
            var picture = ImageHelper.ImageFromUrl(string.Concat(se.Value));
            se.Value = picture;
            se.Handled = true;

          }
        }
      };
      edit.FormatEditValue += (s, se) =>
      {
        if (File.Exists(string.Concat(se.Value)))
        {
          var picture = ImageHelper.ImageFromUrl(string.Concat(se.Value));
          se.Value = picture;
          se.Handled = true;
        }
      };


      if (this.winGridViewPager1.gridView1.Columns.Count > 0 && this.winGridViewPager1.gridView1.RowCount > 0)
      {
        //统一设置100宽度
        foreach (DevExpress.XtraGrid.Columns.GridColumn column in this.winGridViewPager1.gridView1.Columns)
        {
          column.Width = 120;
        }

        //可特殊设置特别的宽度
        GridView gridView = this.winGridViewPager1.gridView1;
        if (gridView != null)
        {
          //gridView.SetGridColumWidth("Note", 200);
        }
      }
    }