using AntdUI; using AntdUIDemo.Models; using AntdUIDemo.Views.Table; using System; using System.Drawing; using System.Linq; using System.Threading; using System.Windows.Forms; namespace AntdUIDemo.Views { public partial class TableDemo : UserControl { private AntdUI.Window window; AntList antList; public TableDemo(AntdUI.Window _window) { window = _window; InitializeComponent(); //初始化表格列头 InitTableColumns(); InitData(); BindEventHandler(); } private void InitTableColumns() { table_base.Columns = new ColumnCollection() { new ColumnCheck("Selected"){Fixed = true}, new Column("Name", "姓名",ColumnAlign.Center), new Column("Age", "年龄",ColumnAlign.Center), new Column("Address", "地址"){ Width = "120", LineBreak = true, }, new ColumnSwitch("Enabled", "是否启用", ColumnAlign.Center){ //支持点击回调 Call= (value,record, i_row, i_col) =>{ //执行耗时操作 Thread.Sleep(2000); AntdUI.Message.info(window, value.ToString(),autoClose:1); return value; } }, new Column("CellImages", "图片",ColumnAlign.Center), new Column("CellTags", "标签",ColumnAlign.Center), new Column("CellBadge", "徽标",ColumnAlign.Center), new Column("CellText", "富文本") { ColAlign = ColumnAlign.Center,//支持表头位置单独设置 }, new Column("CellProgress", "进度条",ColumnAlign.Center), new Column("CellDivider", "分割线",ColumnAlign.Center), new Column("CellLinks", "链接",ColumnAlign.Center), }; } private void BindEventHandler() { buttonADD.Click += ButtonADD_Click; buttonDEL.Click += ButtonDEL_Click; checkbox_border.CheckedChanged += Checkbox_CheckedChanged; checkbox_columndragsort.CheckedChanged += Checkbox_CheckedChanged; checkbox_fixheader.CheckedChanged += Checkbox_CheckedChanged; checkbox_rowstyle.CheckedChanged += Checkbox_rowstyle_CheckedChanged; checkbox_sort.CheckedChanged += Checkbox_CheckedChanged; checkbox_visibleheader.CheckedChanged += Checkbox_CheckedChanged; table_base.CellClick += Table_base_CellClick; table_base.CellButtonClick += Table_base_CellButtonClick; } private void Checkbox_rowstyle_CheckedChanged(object sender, BoolEventArgs e) { if (e.Value) { table_base.SetRowStyle += Table_base_SetRowStyle; table_base.Invalidate(); } else { table_base.SetRowStyle -= Table_base_SetRowStyle; table_base.Invalidate(); } } private void Checkbox_CheckedChanged(object sender, BoolEventArgs e) { table_base.Bordered = checkbox_border.Checked; table_base.ColumnDragSort = checkbox_columndragsort.Checked; table_base.FixedHeader = checkbox_fixheader.Checked; table_base.VisibleHeader = checkbox_visibleheader.Checked; foreach (var item in table_base.Columns) { item.SortOrder = checkbox_sort.Checked; } } private AntdUI.Table.CellStyleInfo Table_base_SetRowStyle(object sender, TableSetRowStyleEventArgs e) { if (e.RowIndex % 2 == 0) { return new AntdUI.Table.CellStyleInfo { BackColor = AntdUI.Style.Db.ErrorBg, }; } return null; } private void ButtonADD_Click(object sender, EventArgs e) { User useradd = new User() { CellBadge = new CellBadge(TState.Processing, "测试中"), CellImages = new CellImage[] { new CellImage(Properties.Resources.head) }, CellDivider = new CellDivider(), CellTags = new CellTag[] { new CellTag("测试", TTypeMini.Primary), new CellTag("测试", TTypeMini.Success), new CellTag("测试", TTypeMini.Warn) }, CellText = new CellText("这是一个无图标的文本"), CellProgress = new CellProgress(0.5f), CellLinks = new CellLink[]{ new CellLink("https://gitee.com/antdui/AntdUI", "AntdUI"), new CellButton(Guid.NewGuid().ToString(),"编辑",TTypeMini.Primary), new CellButton(Guid.NewGuid().ToString(),"删除",TTypeMini.Error) }, }; var form = new UserEdit(window, useradd) { Size = new Size(700, 400) }; AntdUI.Modal.open(new AntdUI.Modal.Config(window, "", form, TType.None) { BtnHeight = 0, }); if (form.submit) { antList.Add(useradd); } } private void Table_base_CellClick(object sender, TableClickEventArgs e) { var record = e.Record; if (record is User user) { //判断是否右键 if (e.Button == MouseButtons.Right) { AntdUI.ContextMenuStrip.open(new AntdUI.ContextMenuStrip.Config(table_base, (item) => { if (item.Text == "编辑") { var form = new UserEdit(window, user) { Size = new Size(500, 300) }; AntdUI.Drawer.open(new AntdUI.Drawer.Config(window, form) { OnLoad = () => { AntdUI.Message.info(window, "进入编辑", autoClose: 1); }, OnClose = () => { AntdUI.Message.info(window, "结束编辑", autoClose: 1); } }); } else if (item.Text == "删除") { var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn); if (result == DialogResult.OK) { //使用反转for循环删除 for (int i = antList.Count - 1; i >= 0; i--) { if (antList[i].Selected) { antList.Remove(antList[i]); } } } } else AntdUI.Message.info(window, item.Text, autoClose: 1); }, new IContextMenuStripItem[] { new AntdUI.ContextMenuStripItem("编辑"){ IconSvg = "", }, new AntdUI.ContextMenuStripItem("删除"){ IconSvg = "" }, new ContextMenuStripItemDivider(), new AntdUI.ContextMenuStripItem("详情"){ Sub = new IContextMenuStripItem[]{ new AntdUI.ContextMenuStripItem("打印", "Ctrl + P") { }, new AntdUI.ContextMenuStripItem("另存为", "Ctrl + S") { } }, IconSvg = "", } })); } } } //表格内部按钮事件 private void Table_base_CellButtonClick(object sender, TableButtonEventArgs e) { var buttontext = e.Btn.Text; if (e.Record is User user) { switch (buttontext) { //暂不支持进入整行编辑,只支持指定单元格编辑,推荐使用弹窗或抽屉编辑整行数据 case "编辑": var form = new UserEdit(window, user) { Size = new Size(500, 300) }; AntdUI.Drawer.open(new AntdUI.Drawer.Config(window, form) { OnLoad = () => { AntdUI.Message.info(window, "进入编辑", autoClose: 1); }, OnClose = () => { AntdUI.Message.info(window, "结束编辑", autoClose: 1); } }); break; case "删除": var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn); if (result == DialogResult.OK) antList.Remove(user); break; case "AntdUI": AntdUI.Message.info(window, user.CellLinks.FirstOrDefault().Id, autoClose: 1); break; } } } private void ButtonDEL_Click(object sender, EventArgs e) { if (antList.Count == 0 || !antList.Any(x => x.Selected)) { AntdUI.Message.warn(window, "请选择要删除的行!", autoClose: 3); return; } var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn); if (result == DialogResult.OK) { //使用反转for循环删除 for (int i = antList.Count - 1; i >= 0; i--) { if (antList[i].Selected) { antList.Remove(antList[i]); } } } } private void InitData() { antList = new AntList(10); for (int i = 0; i < 10; i++) { antList.Add(new User { Name = "张三", Age = 30 + i, Address = $"浙江省杭州市西湖区湖底公园{i + 1}号", Enabled = i % 2 == 0, CellImages = new CellImage[] { new CellImage(Properties.Resources.head) }, CellTags = new CellTag[] { new CellTag("测试", TTypeMini.Primary), new CellTag("测试", TTypeMini.Success), new CellTag("测试", TTypeMini.Warn) }, CellBadge = new CellBadge(TState.Processing, "测试中"), CellText = new CellText("这是一个带图标的文本") { IconRatio = 0.5f, PrefixSvg = "" }, CellLinks = new CellLink[] {new CellLink("https://gitee.com/antdui/AntdUI", "AntdUI"), new CellButton(Guid.NewGuid().ToString(),"编辑",TTypeMini.Primary), new CellButton(Guid.NewGuid().ToString(),"删除",TTypeMini.Error) }, //value:0-1 CellProgress = new CellProgress(0.5f), CellDivider = new CellDivider(), }); } table_base.Binding(antList); } } }