DevExpress中TileView的使用

发布时间 2024-01-05 16:58:33作者: iCare℃

 1、前期准备

VS2019、DevExpress19.2、MySql5.7、FreeSql3.2.808、.Net Farmework 4.8

2、创建本次示例中所需数据库及表

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

3、在VS2019进行代码实现

1、首先在vs2019中建立一个WinFom窗体,并取名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 {

	[JsonObject(MemberSerialization.OptIn)]
	public partial class hero {

		[JsonProperty, Column(IsPrimary = true, IsIdentity = true)]
		public int N_Id { get; set; }

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

		[JsonProperty]
		public string ImgSrc { get; set; }

		[JsonProperty]
		public string Name { get; set; }

		[JsonProperty]
		public string NickName { get; set; }

		[JsonProperty]
		public Sex Sex { get; set; }


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

		[Navigate("CountryId")]
		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[5].Text = String.Empty;
            if (sex == 1)
                e.Item.Elements[5].Appearance.Normal.BackColor = female;
            else
                e.Item.Elements[5].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、实际显示