当前位置: 首页 > article >正文

winform基于antdui中table控件的使用

官方链接gitee:AntdUI/AntdUI

Table表格属性、方法:

属性:

名称

描述

类型

默认值

Gap

间距

int

12

Radius 🔴

圆角

int

0

CheckSize

复选框大小

int

16

SwitchSize 🔴

开关大小

int

16

TreeButtonSize 🔴

树开关按钮大小

int

16

FixedHeader

固定表头

bool

true

VisibleHeader 🔴

显示表头

bool

true

Bordered

显示列边框

bool

false

RowHeight 🔴

行高

int?

null

RowHeightHeader 🔴

表头行高

int?

null

EnableHeaderResizing

手动调整列头宽度

bool

false

ColumnDragSort

列拖拽排序

bool

false

LostFocusClearSelection

焦点离开清空选中

bool

false

AutoSizeColumnsMode 🔴

列宽自动调整模式

ColumnsMode

Auto

ClipboardCopy

行复制

bool

true

EditMode

编辑模式

TEditMode

None

ShowTip

省略文字提示

bool

true

DefaultExpand 🔴

默认是否展开

bool

false

Empty

是否显示空样式

bool

true

EmptyText

数据为空显示文字

string

No data

EmptyImage

数据为空显示图片

Image?

null

EmptyHeader

空是否显示表头

bool

false

RowSelectedBg

表格行选中背景色

Color?

null

RowSelectedFore 🔴

表格行选中字色

Color?

null

BorderColor 🔴

表格边框颜色

Color?

null

ColumnFont 🔴

表头字体

Font?

null

ColumnBack 🔴

表头背景色

Color?

null

ColumnFore 🔴

表头文本色

Color?

null

SelectedIndex

选中行

int

-1

Columns

表格列的配置

ColumnCollection

null

DataSource

数据数组

object

?

支持DataTable,Class等

方法:

名称

描述

返回值

参数

ScrollLine

滚动到指定行

void

int i

CopyData

复制表格数据

void

int row

CopyData

复制表格数据

void

int row

, int column

EnterEditMode

进入编辑模式

void

int row

, int column

SortIndex 🔴

获取排序序号

int[]

SortList 🔴

获取排序数据

object[]

Table表格双击单元格实现修改内容操作,通过调用CellEndEdit事件,处理修改后逻辑:

主要是通过事件参数e,获取当前修改是哪一行var row = e.RowIndex - 1;然后在通过该行索引,获取该行的数据内容,在执行后续的更新逻辑。

private bool table1_CellEndEdit(object sender, AntdUI.TableEndEditEventArgs e)
{
    var newVal = e.Value;
    var row = e.RowIndex - 1; // 当前行数据
    var column = e.ColumnIndex; // 当前列

    var dataSource = table1.DataSource as List<TestClass>;
    if (dataSource == null)
    {
        MessageBox.Show("数据源无效!");
        return false;
    }
    var rowData = dataSource[row];
    var columnName = table1.Columns[column].Key;
    switch (columnName)
    {
        case "Name":
            rowData.Name = newVal.ToString();
            break;
        case "Age":
            rowData.Age = Convert.ToInt32(newVal);
            break;
        case "Job":
            rowData.Job = newVal.ToString();
            break;
        default:
            MessageBox.Show("无效的列名!");
            return false;
    }
    DialogResult result = MessageBox.Show("是否更新数据?", "数据更新", MessageBoxButtons.YesNo);
    if (result == DialogResult.Yes)
    {
        // 保存到数据库
        UpdateToDatabase(rowData);

        // 刷新表格
        table1.DataSource = null; // 清空数据源
        table1.DataSource = dataSource; // 重新绑定数据源
        _logHelper.Log("数据更新成功");
        // 返回 true 表示更新成功
        return true;
    }
    else
    {
        // 返回 false 表示取消更新
        return false;
    }
}

表头类型:

如下用于初始化table表头的创建配置:

table1.Columns = new AntdUI.ColumnCollection
{
    new AntdUI.ColumnCheck("check").SetFixed(),
    new AntdUI.Column("name", "姓名").SetFixed().SetLocalizationTitleID("Table.Column."),
    new AntdUI.ColumnCheck("checkTitle", "不全选标题").SetColAlign().SetLocalizationTitleID("Table.Column."),
    new AntdUI.ColumnRadio("radio", "单选").SetLocalizationTitleID("Table.Column."),
    new AntdUI.Column("online", "状态", AntdUI.ColumnAlign.Center).SetLocalizationTitleID("Table.Column."),
    new AntdUI.ColumnSwitch("enable", "启用", AntdUI.ColumnAlign.Center)
    {
        LocalizationTitle ="Table.Column.{id}",
        Call = (value, record, i_row, i_col) => {
            System.Threading.Thread.Sleep(2000);
            return value;
        }
    },
    new AntdUI.Column("age", "年龄", AntdUI.ColumnAlign.Center).SetLocalizationTitleID("Table.Column."),
    new AntdUI.Column("address", "住址").SetLocalizationTitleID("Table.Column."),
    new AntdUI.Column("tag", "Tag"),
    new AntdUI.Column("imgs", "图片").SetLocalizationTitleID("Table.Column."),
    new AntdUI.Column("btns", "操作").SetFixed().SetWidth("auto").SetLocalizationTitleID("Table.Column."),
};

属性

描述

SetFixed()

使该列固定(在表格滚动时,列内容保持可见)。

SetLocalizationTitleID("Table.Column.")

为该列标题设置本地化ID,使得可以通过本地化资源文件加载不同语言的标题。

SetColAlign()

设置该列的对齐方式。

AntdUI.ColumnAlign.Center

将列内容水平居中对齐

SetWidth("auto")

列的宽度设置为自动调整。

Column

多样表头,可以创建多种形式表头,普通表头、按钮表头、徽标、富文本、进度条等等,按钮表头通过嵌入按钮来实现按钮点击操作:

属性名称

描述

类型

必填

默认值

Key

绑定名称

string

Title

显示文字

string

Visible 🔴

是否显示

bool

true

Align

对齐方式

ColumnAlign

ColumnAlign.Left

ColAlign 🔴

表头对齐方式

ColumnAlign?

null

Width

列宽度

string?

MaxWidth 🔴

列最大宽度

string?

Fixed

列是否固定

bool

false

Ellipsis

超过宽度将自动省略

bool

false

LineBreak 🔴

自动换行

bool

false

SortOrder 🔴

启用排序

bool

false

KeyTree 🔴

树形列

string?

ColumnCheck

复选框表头,可以使用该行的勾选状态。继承于 Column

名称

描述

类型

必填

默认值

Key

绑定名称

string

Columnadio

单选框表头。继承于 Column

名称

描述

类型

必填

默认值

Key

绑定名称

string

Title

显示文字

string

ColumnSwitch

开关表头,可以用来设置改行是否启用。继承于 Column

名称

描述

类型

必填

默认值

Key

绑定名称

string

Title

显示文字

string

Call

改变回调

Func<bool, object?, int, int, bool>?

Cell单元格配置

CellText

富文本文本单元格,可以带图标,不同的字体。

名称

描述

类型

默认值

Fore

字体颜色

Color?

Back

背景颜色

Color?

Font

字体

Font?

IconRatio 🔴

图标比例

float

0.7F

Prefix 🔴

前缀

Image?

PrefixSvg 🔴

前缀SVG

string?

Suffix 🔴

后缀

Image?

SuffixSvg 🔴

后缀SVG

string?

Text

文本

string?

初始化设置:

private CellText cellText;
public CellText CellText
{
    get { return cellText; }
    set
    {
        if (cellText == value) return;
        cellText = value;
        OnPropertyChanged(nameof(CellText));
    }
}

CellText = new CellText("这是一个带图标的文本")
{
    IconRatio = 0.5f,
    PrefixSvg = "<svg viewBox=\"64 64 896 896\" focusable=\"false\" data-icon=\"search\" width=\"1em\" height=\"1em\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M909.6 854.5L649.9 594.8C690.2 542.7 712 479 712 412c0-80.2-31.3-155.4-87.9-212.1-56.6-56.7-132-87.9-212.1-87.9s-155.5 31.3-212.1 87.9C143.2 256.5 112 331.8 112 412c0 80.1 31.3 155.5 87.9 212.1C256.5 680.8 331.8 712 412 712c67 0 130.6-21.8 182.7-62l259.7 259.6a8.2 8.2 0 0011.6 0l43.6-43.5a8.2 8.2 0 000-11.6zM570.4 570.4C528 612.7 471.8 636 412 636s-116-23.3-158.4-65.6C211.3 528 188 471.8 188 412s23.3-116.1 65.6-158.4C296 211.3 352.2 188 412 188s116.1 23.2 158.4 65.6S636 352.2 636 412s-23.3 116.1-65.6 158.4z\"></path></svg>"
},

CellBadge

徽标显示在单元格内

名称

描述

类型

默认值

Fore

字体颜色

Color?

Fill

颜色

Color?

State

状态

TState

Default

Text

文本

string?

初始化构建:

private CellBadge cellBadge;
public CellBadge CellBadge
{
    get { return cellBadge; }
    set
    {
        if (cellBadge == value) return;
        cellBadge = value;
        OnPropertyChanged(nameof(CellBadge));
    }
}
CellBadge = new CellBadge(TState.Processing, "测试中")

TState状态属性,每一个属性对应一种不同的样式:

名称

描述

Primary

主要

Default

默认

Success

成功

Error

错误

Processing

处理中

Warn

警告

CellTag

标签

名称

描述

类型

默认值

Fore

字体颜色

Color?

Back

背景颜色

Color?

BorderWidth

边框宽度

float

1F

Type

类型

TTypeMini

Default

Text

文本

string?

private CellTag[] cellTags;
public CellTag[] CellTags
{
    get { return cellTags; }
    set
    {
        if (cellTags == value) return;
        cellTags = value;
        OnPropertyChanged(nameof(CellTags));
    }
}
CellTags = new CellTag[] {
    new CellTag("测试", TTypeMini.Primary),
    new CellTag("测试", TTypeMini.Success),
    new CellTag("测试", TTypeMini.Warn) };

如上代码,在CellTags单元格内创建了三个标签,其他类型的单元格也可以通过数组创建多个控件。

TTypeMini类型属性:

名称

描述

Default

默认

Primary

主要

Success

成功

Error

错误

Warn

警告

Info

信息

CellImage

可以在单元格内展示图片

名称

描述

类型

默认值

BorderColor

边框颜色

Color?

BorderWidth

边框宽度

float

0F

Radius

圆角

int

6

Round

圆角样式

bool

false

Size

自定义大小

Size?

Image

图片

Image?

null

ImageSvg

图片SVG

string?

null

FillSvg

SVG填充颜色

Color?

ImageFit

图片布局

TFit

Fill

Tooltip 🔴

文本提示

string?

private CellImage[] cellImages;
public CellImage[] CellImages
{
 get { return cellImages; }
 set
 {
     if (cellImages == value) return;
     cellImages = value;
     OnPropertyChanged(nameof(CellImages));
 }
}
CellImages = new CellImage[] { new CellImage(Properties.Resources.head) };
// Properties.Resources.head是一个图片资源
// 这里只添加了一个图片,如果要添加多个,就以“,”分割多new几个CellImage出来

TFit 图片布局属性

名称

描述

Fill

调整替换后的内容大小,以填充元素的内容框。如有必要,将拉伸或挤压物体以适应该对象

Contain

缩放替换后的内容以保持其纵横比,同时将其放入元素的内容框

Cover

调整替换内容的大小,以在填充元素的整个内容框时保持其长宽比。该对象将被裁剪以适应

None

不对替换的内容调整大小

CellLink

超链接,也可以new CellButton

名称

描述

类型

默认值

Id

ID

string

Enabled

启用

bool

true

Text

文本

string?

TextAlign

文本位置

ContentAlignment

MiddleCenter

Tooltip 🔴

文本提示

string?

private CellLink[] cellLinks;
public CellLink[] CellLinks
{
    get { return cellLinks; }
    set
    {
        if (cellLinks == value) return;
        cellLinks = value;
        OnPropertyChanged(nameof(CellLinks));
    }
}
CellLinks = new CellLink[] {
    new CellLink("https://gitee.com/antdui/AntdUI", "AntdUI"),  // 超链接
    new CellButton(Guid.NewGuid().ToString(),"编辑",TTypeMini.Primary), // button
    new CellButton(Guid.NewGuid().ToString(),"删除",TTypeMini.Error),
    new CellButton(Guid.NewGuid().ToString(),"查看图片",TTypeMini.Primary)
};                         

CellButton

按钮控件,继承自CellLink

名称

描述

类型

默认值

Fore

字体颜色

Color?

Back

背景颜色

Color?

BackHover

悬停背景颜色

Color?

BackActive

激活背景颜色

Color?

DefaultBack 🔴

Default模式背景颜色

Color?

DefaultBorderColor 🔴

Default模式边框颜色

Color?

Radius

圆角

int

6

BorderWidth

边框宽度

float

0F

IconRatio 🔴

图标比例

float

0.7F

Image 🔴

图像

Image?

null

ImageSvg 🔴

图像SVG

string?

null

ImageHover 🔴

悬停图像

Image?

null

ImageHoverSvg 🔴

悬停图像SVG

string?

null

ImageHoverAnimation 🔴

悬停图像动画时长

int

200

Shape

形状

TShape

Default

Ghost

幽灵属性 使按钮背景透明

bool

false

ShowArrow

显示箭头

bool

false

IsLink

箭头链接样式

bool

false

Type

类型

TTypeMini

Default

Text

文本

string?

创建一个普通的按钮:

new CellButton(Guid.NewGuid().ToString(),"编辑",TTypeMini.Primary),

创建一个具有下拉框属性的按钮:

new CellButton(Guid.NewGuid().ToString(), "徽标", TTypeMini.Success)
{
    //支持所有单元格控件
    // 创建下拉列表元素
    DropDownItems = new ISelectItem[]
    {
         new AntdUI.SelectItem(TState.Default),
         new AntdUI.SelectItem(TState.Primary),
         new AntdUI.SelectItem(TState.Success),
         new AntdUI.SelectItem(TState.Error),
         new AntdUI.SelectItem(TState.Warn),
         new AntdUI.SelectItem(TState.Processing),

    },
    // 当下拉列表值改变时触发的事件操作
    // 这里实现的操作是通过下拉选择的不同徽标,将其赋给另外一徽标控件上
    DropDownValueChanged = (value) =>
    {
        string badge = value.ToString();
        switch(badge) {
        case "Default":
                curUser.CellBadge = new CellBadge(TState.Default, badge); break;
        case "Primary":
                curUser.CellBadge = new CellBadge(TState.Primary, badge); break;
        case "Success":
                curUser.CellBadge = new CellBadge(TState.Success, badge); break;
        case "Error":
                curUser.CellBadge = new CellBadge(TState.Error, badge); break;
        case "Warn":
                curUser.CellBadge = new CellBadge(TState.Warn, badge); break;
        case "Processing":
                curUser.CellBadge = new CellBadge(TState.Processing, badge); break;
        }
    }
},

通过调用表格的CellButtonClick点击事件来实现单元格按钮被点击时处理对应业务逻辑:

如下代码通过点击按钮,实现将某一单元格数值置零:

private void Table_base_CellButtonClick(object sender, TableButtonEventArgs e)
{
    // 获取鼠标点击按钮的id值,指定点击的哪一个
    var buttontext = e.Btn.Id;

    if (e.Record is ControlItemStatisticsData info)
    {
        curControlItem = info;
        switch (buttontext)
        {
            //暂不支持进入整行编辑,只支持指定单元格编辑,推荐使用弹窗或抽屉编辑整行数据
            case "BtnUsageReset":
                var result = AntdUI.Modal.open(this, "清零警告!", "确认要清零吗?", TType.Warn);
                if (result == DialogResult.OK)
                    curControlItem.Used = 0;
                break;
            case "BtnAccumulatedReset":
                //超链接内容
                result = AntdUI.Modal.open(this, "清零警告!", "确认要清零吗?", TType.Warn);
                if (result == DialogResult.OK)
                {
                    curControlItem.TotalAccumulatedCount = 0;
                }
                break;
        }
    }
}

CellProgress

进度条

名称

描述

类型

默认值

Back

背景颜色

Color?

Fill

进度条颜色

Color?

Radius

圆角

int

6

Shape

形状

TShape

Default

Value

进度条 0.0-1.0

float

0F

private CellProgress cellProgress;
public CellProgress CellProgress
{
    get { return cellProgress; }
    set
    {
        if (cellProgress == value) return;
        cellProgress = value;
        OnPropertyChanged(nameof(CellProgress));
    }
}
CellProgress = new CellProgress(0.5f);  // 设置圆角弧度值

使用 BindingListAntList 作为List,并在设置数据时使用Binding(AntList<T> list)来绑定实现数据在table上的实时更新。

使用类继承 NotifyProperty OR INotifyPropertyChanged,并在set时触发OnPropertyChanged (string 字段名称)

public class TestClass : AntdUI.NotifyProperty
{
    bool _check = false;
    public bool check  // check与表头的key值对应
    {
        get => _check;
        set
        {
            if (_check == value) return;
            _check = value;
            OnPropertyChanged();  // 必须触发该事件,才能将数据映射到对应单元格中
        }
    }
}

 


http://www.kler.cn/a/577773.html

相关文章:

  • 蓝桥杯备考:bfs之马的遍历
  • Android AudioFlinger(一)——初识AndroidAudio Flinger
  • Vite 6 升级指南:CJS 和 ESM 的爱恨情仇
  • 单例设计模式---懒汉式--线程安全和不安全、枚举类
  • 用AI学编程4——swift学习1
  • Mac软件卸载后启动台图标还在
  • 基于深度学习的恶意软件检测系统:设计与实现
  • springmvc_view介绍
  • 4、STL的deque使用方法
  • SpringBoot知识点及其源码解析(3)
  • 华为eNSP:实验 OSPF单区域
  • 4.归一化技术:深度网络中的关键优化手段——大模型开发深度学习理论基础
  • 2025-03-08 学习记录--C/C++-C 语言 判断一个数是否是完全平方数
  • Naive UI 更换主题颜色
  • 《安富莱嵌入式周报》第351期:DIY半导体制造,工业设备抗干扰提升方法,NASA软件开发规范,小型LCD在线UI编辑器,开源USB PD电源,开源锂电池管理
  • LDR6500 PD 协议芯片的运用场景
  • uniapp 自定义地图组件(根据经纬度展示地图地理位置)
  • Web开发-PHP应用Cookie脆弱Session固定Token唯一身份验证数据库通讯
  • windows 平台如何点击网页上的url ,会打开远程桌面连接服务器
  • 第十二届蓝桥杯 异或数列