AntdUI学习笔记之Table控件使用
5. 学习笔记:使用MindNode或Evernote做笔记 #生活技巧# #工作学习技巧#
Table控件直观感受如上图,右侧列表就是使用Table控件实现的。它类似于VS的DataGridView,但存在诸多不同。
数据呈现在DataGridView控件里,可以通过代码逐行插入数据,也可以通过Datasource属性绑定数据源。
Table控件则不能通过代码插入一行或几行数据,它根本没有AddRow和InsertRow方法。根据Demo提供的代码,Table的数据呈现及操作是需要通过Binding方法绑定数据源,然后直接操作数据源,即可自动实时更新Table呈现。
BInding方法只能绑定BindingList类型的数据源,为了实现上图中的呈现,需要:
定义类BarcodeData,属性分别为FactorySN(生产序号),MachineSN(整机SN),BoxSN(彩盒SN),Result(整机SN与彩盒SN是否一致),DT(操作时间)。
在Form_Load事件里,初始化Table各列,要求列名必须与BarcodeData各属性名一致,列标题则根据实际情况设置即可。
table1.Columns = New ColumnCollection() From { New Column("FactorySN", "生产序号") With { .Width = 270, .Visible = True }, New Column("MachineSN", "整机SN") With { .Width = 250, .Visible = True }, New Column("BoxSN", "彩盒SN") With { .Width = 250, .Visible = True }, New Column("Result", "匹配结果") With { .Width = 100, .[ReadOnly] = True, .Visible = True }, New Column("DT", "操作时间") With { .Width = 205, .Visible = True } } table1.FixedHeader = True table1.VisibleHeader = True
在MainForm里,定义窗体级私有变量ds,用来作为Table1的数据源。
''' <summary> ''' 扫码数据集合 ''' </summary> Private ds As New BindingList(Of BarcodeData)
将数据源绑定到Table1。注意这里有个坑,如果ds不包含任何元素,该绑定语句会报错“超出索引范围”。因此,需要在第一次扫码后,检测ds.Count=1时,再进行绑定。
table1.Binding(ds)
经过以上步骤,当ds发生变化时,table1的内容会同步变更。比如要新增一行,只需要定义个BarcodeData实例,赋值后添加到ds里即可。如果要删除某行,只需要将ds里对应的元素Remove即可。
BarcodeData属性变化时,如何实时更新到Table界面?但这里又出现一个问题,如果要更新某行的数据,你会发现,直接修改该行对应的ds中元素的属性,table里该行并没有发生变化。但是Demo里,修改属性可是能够自动实时更新到Table的。
比如:
Dim row = ds.FirstOrDefault(Function(o) o.FactorySN = factorySN) row.BoxSN = sn row.Result = row.MachineSN = row.BoxSN row.DT = Now
然而Table1的BoxSN列、Result列和DT列的值并没有发生变化。
仔细研读Demo代码,及查阅相关文档,发现BarcodeData类要继承AntdUI.NotifyProperty类,或者实现INotifyPropertyChanged接口。
Demo提供的是继承AntdUI.NotifyProperty,而我写的BarcodeData因为已经继承了DatabaseConfigBase类,所以只能通过实现接口的方式。
修改BarcodeData类,实现INotifyPropertyChanged接口。注意接口只能写在继承类的后面。
Public Class BarcodeData : Inherits DatabaseConfigBase : Implements INotifyPropertyChanged
定义PropertyChanged事件。
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
编写触发事件的过程代码。
Private Sub NotifyPropertyChanged(propertyName As String) RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) End Sub
当属性发生变化时,触发事件。以FactorySN属性为例,其余各属性依此类比。
Private _factorySN As String Public Property FactorySN As String Get Return _factorySN End Get Set(value As String) If _factorySN <> value Then _factorySN = value NotifyPropertyChanged(NameOf(FactorySN)) End If End Set End Property
经过以上步骤,即实现了更新某行对应元素的属性值,table界面同步实时更新。
总结因为Table控件跟DataGridView控件还是有诸多不同的,在摸索过程中遇到了不少坑。但是经过一番使用,感觉它很有自己的特色,熟悉它的思路之后,使用起来确实挺方便的。
网址:AntdUI学习笔记之Table控件使用 https://klqsh.com/news/view/151773
相关内容
C# WinForm AndtUI第三方库 Table控件使用记录AntdUI/AntdUI: 基于 Ant Design 设计语言的 Winform 界面库
好用的读书笔记app软件推荐
学习计划+读书笔记手帐排版公开
快乐心理学读书笔记5篇600字
正能量读书笔记1000字(素材稿件7篇)
十大好用的日记软件 写日记用什么软件好 日记软件app推荐
笔记本当做主机使用,深度解析,笔记本变身主机,打造高效办公娱乐新体验
阅读语感笔记写作——漫谈写作习惯
幸福哲学书读书笔记