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 { [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、实际显示