繁华似绵 发表于 2024-1-5 18:14:52

DevExpress中TileView的使用

 1、前期准备

VS2019、DevExpress19.2、MySql5.7、FreeSql3.2.808、.Net Farmework 4.8
2、创建本次示例中所需数据库及表

我这里建立的数据库为loldb,其下会使用到hero和country两个表


3、在VS2019进行代码实现

1、首先在vs2019中建立一个WinForm窗体,并取名TileViewDemo



 
2、窗体创建完成后引入我们本次会使用到的dll文件

Dev类目dll文件引用时需要我们在系统中确保已经安装了DevExpress19.2
FreeSql类目dll文件可以通过NuGet手动下载对应版本

 
3、为了美观,可设置为DevExpress窗体


4、回到设计界面,在工具箱中找到对应控件

找到GridControl控件拖拽至主界面中,并将该控件Dock设置为Fill。

转换view为TileView


5、点击Run Designer进行内容设计

 添加column列表,并对一些特殊column进行设置


Views设置

Layout设置

 Tile Template设置

 
 
6、创建数据库连接类


 
7、创建Domain

 

 hero表
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using FreeSql.DataAnnotations;

namespace Domain {

       
        public partial class hero {

               
                public int N_Id { get; set; }

               
                public int CountryId { get => _CountryId; set {
                        if (_CountryId == value) return;
                        _CountryId = value;
                        country = null;
                } }
                private int _CountryId;

               
                public string ImgSrc { get; set; }

               
                public string Name { get; set; }

               
                public string NickName { get; set; }

               
                public Sex Sex { get; set; }


                #region 外键 => 导航属性,ManyToOne/OneToOne

               
                public virtual country country { get; set; }

                #endregion

                #region 外键 => 导航属性,ManyToMany

                #endregion
        }

        public enum Sex {
                女,
                男
        }
} 
8、关键代码

 
using Domain;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TileViewDemo
{
    public partial class MainForm : DevExpress.XtraEditors.XtraForm
    {
      public MainForm()
      {
            InitializeComponent();
      }

      private void MainForm_Load(object sender, EventArgs e)
      {
            Global.Instance.ConnnectionServer(out string exMsg);
            if (!string.IsNullOrEmpty(exMsg))
            {
                MessageBox.Show("数据库连接失败:" + exMsg);
                return;
            }
            List<hero> heroes = Global.Instance.freeSql.Select<hero>().Include(a => a.country).ToList();
            List<herodDto> heroDtos = new List<herodDto>();
            foreach (var item in heroes)
            {
                herodDto herodDto = new herodDto()
                {
                  Id = item.N_Id,
                  Photo = Image.FromFile(item.ImgSrc),
                  Name = item.Name,
                  NickName = item.NickName,
                  Sex = item.Sex,
                  CountryName = item.country.CountryName
                };
                heroDtos.Add(herodDto);
            }
            gc_DataList.DataSource = heroDtos;
      }

      /// <summary>
      /// 定制每个卡片
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void tv_DataList_ItemCustomize(object sender, DevExpress.XtraGrid.Views.Tile.TileViewItemCustomizeEventArgs e)
      {
            if (e.Item == null || e.Item.Elements.Count == 0)
                return;
            int sex = (int)tv_DataList.GetRowCellValue(e.RowHandle, tv_DataList.Columns["Sex"]);

            Color female = Color.LightBlue;
            Color male = Color.DarkRed;

            e.Item.Elements.Text = String.Empty;
            if (sex == 1)
                e.Item.Elements.Appearance.Normal.BackColor = female;
            else
                e.Item.Elements.Appearance.Normal.BackColor = male;
      }

      /// <summary>
      /// 每个卡片的点击事件
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void tv_DataList_ItemClick(object sender, DevExpress.XtraGrid.Views.Tile.TileViewItemClickEventArgs e)
      {
            herodDto herodDto = tv_DataList.GetRow(e.Item.RowHandle) as herodDto;
            herodDto.IsSelect = !herodDto.IsSelect;
            tv_DataList.RefreshRow(e.Item.RowHandle);
      }
    }

    public class herodDto
    {
      public int Id { get; set; }
      public Image Photo { get; set; }
      public string Name { get; set; }
      public string NickName { get; set; }
      public Sex Sex { get; set; }
      public string CountryName { get; set; }
      public bool IsSelect { get; set; } = true;
    }
} 
9、实际显示


 

来源:https://www.cnblogs.com/icarec/Undeclared/17926092.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: DevExpress中TileView的使用