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

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();  // 必须触发该事件,才能将数据映射到对应单元格中
        }
    }
}

 

相关文章:

  • System Enginner系统工程师成长思考
  • 爬虫相关的零碎知识
  • Android Activity的启动器ActivityStarter入口
  • 力扣刷题167. 两数之和 II - 输入有序数组
  • 游戏引擎学习第147天
  • sanitizer和valgrind
  • (二十七)Java-ThreadPoolExecutor
  • laravel中 添加公共/通用 方法/函数
  • 【从零开始学习计算机科学】计算机组成原理(一)计算机的发展历史 与 分类
  • Android Glide 图片解码与转换模块原理深度剖析
  • 开发ai模型最佳的系统是Ubuntu还是linux?
  • 链接器与加载器
  • golang中具有 “no copy“的类型
  • 基于SpringBoot的“积分制零食自选销售平台”的设计与实现(源码+数据库+文档+PPT)
  • 逐梦DBA:Linux版本 MySQL的安装
  • 初识Apache Flink:起源、设计理念与企业级应用全景解析
  • 跟着 Lua 5.1 官方参考文档学习 Lua (12)
  • SSM配置拦截器
  • 基于Python+Vue的智能服装商城管理系统的设计与实现
  • RISC-V医疗芯片工程师复合型转型的路径与策略
  • 创建网站大约多少钱/seo推广软件品牌
  • 双桥网站建设/nba排名2021最新排名
  • 帮客户做网站平台犯法吗/免费创建属于自己的网站
  • 网站首页html代码/网络推广企划
  • 网站建设五年发展规划/郑州网站建设方案优化
  • 优秀网站设计分析/公司软文