B4XTable是基于分页的表格工具,它内置了丰富的功能栏及功能按钮,有页面导航栏、行状态信息栏、列排序按钮及搜索框,可以很方便地操作B4XTable页面查询、显示当前记录状态信息。
页面导航栏包含四个导航按钮和一个页面状态信息文本标签,分别是:
lblFirst 首页按钮,可用时点击将显示首页数据,控件类型为B4XView。
lblBack 上页按钮,可用时点击将显示上页数据,控件类型为B4XView。
lblNext 下页按钮,可用时点击将显示下页数据,控件类型为B4XView。
lblLast 尾页按钮,可用时点击将显示尾页数据,控件类型为B4XView。
lblNumber 页面信息标签,默认显示当前页码,控件类型为B4XView。
我们可以在B4XTable1_DataUpdated事件中设置自定义显示信息。如可以显示为:当前页码/总页数。
这五个控件共用一个父容器Parent,四个导航按钮默认字体是MaterialIcons,默认字体大小36。lblNumber的默认字体是系统默认字体,默认字体大小20。我们可以更改页面导航栏字体和按钮文本,实现自定义导航栏。
例如:
Dim font1 As B4XFont=B4XTable1.lblNumber.Font
B4XTable1.lblFirst.Text="首页"
B4XTable1.lblBack.Text="上页"
B4XTable1.lblNext.Text="下页"
B4XTable1.lblLast.Text="尾页"
Dim p As B4XView=B4XTable1.lblBack.Parent
For Each v As B4XView In p.GetAllViewsRecursive
v.Font=font1
v.TextSize=12
Next
在B4XTable1_DataUpdated事件中添加如下语句:
Dim TotalPage As Int=Ceil(B4XTable1.Size/B4XTable1.RowsPerPage)
B4XTable1.lblNumber.Text=$"${B4XTable1.CurrentPage} / ${TotalPage}"$
lblFromTo是行状态信息栏控件,类型为B4XView。显示当前页是从第n1行到n2行及总行数,默认显示:n1 to n2 out of total,这种情况下:
B4XTable1.StringTo="to"
B4XTable1.StringOutOf="out of"
当搜索不到符合条件的记录时默认行状态信息显示的文本:
B4XTable1.StringNoMatches="No Matches"
当搜索到符合条件的记录时,默认将由下面信息替换out of total:
B4XTable1.StringMoreAvailable="more available"
我们可以通过更改这两个属性来更改显示的行状态信息字符串。如:
B4XTable1.StringTo="-"
B4XTable1.StringOutOf="/总数"
B4XTable1.StringNoMatches="没有匹配的字符串"
行状态信息栏将显示为:n1 - n2 /总数 total。
当搜索不到符合条件的记录时,行状态信息将显示:没有匹配的字符串。
列排序按钮lblSort也是一个B4XView控件,默认情况下隐藏,当点击列标题时,显示在该列标题的右端。首次点击该列按升序排列,再次点击则按降序排列。
隐藏列排序按钮:B4XTable1.lblSort.Visible=False
禁用列排序按钮:Column.Sortable=False
搜索框SearchField也是一个B4XView控件,在搜索框中输入搜索关键字,B4XTable将自动在各文本列搜索包含该关键字的记录,并自动过滤掉不包含该关键字的记录。
我们可以设置SearchField的属性以更改搜索框的外观和布局:
B4XTable1.SearchField.TextField.TextSize=12
B4XTable1.SearchField.HintText="搜索关键字"
B4XTable1.SearchField.HintColor=xui.Color_LightGray
B4XTable1.SearchField.mBase.Width=100
B4XTable1.SearchField.mBase.Height=30
B4XTable1.SearchField.mBase.Top=5
B4XTable1.StringNoMatches="没有匹配的字符串"
B4XTable1.SearchField.Update
注意:必须使用B4XTable1.SearchField.Update,更改的属性才能生效。
搜索后B4XTable显示的符合条件的记录只是临时数据集合,内部数据库data的记录并不会因搜索显示数据的变化而变化,B4XTable1.Size不会发生变化,页面总数也不会发生不变化。
要使页面状态信息和行状态信息实时反映搜索结果,需要在B4XTable1_DataUpdated事件中添加相关查询语句:
Dim count As Int=B4XTable1.Size
Dim tx As String=B4XTable1.SearchField.TextField.Text.Trim
If tx.Length>0 Then
Dim sql2 As String=$"select count() from data where c1 like '%${tx}%' or c2 like '%${tx}%' or c4 like '%${tx}%'"$
Dim co As Int=B4XTable1.sql1.ExecQuerySingleResult(sql2)
If co>0 Then
count=co
End If
End If
TotalPage=Ceil(count/B4XTable1.RowsPerPage)
B4XTable1.lblNumber.Text=$"${B4XTable1.CurrentPage} / ${TotalPage}"$
B4XTable1.StringMoreAvailable=$"/总数${count}"$
B4XTable1.Refresh
页面导航栏、行状态信息栏、搜索框默认情况下显示在B4XTable表格的上端,我们可以通过设置其Visisble属性定制其是否显示。
如果要改变其显示位置,一般需要三个步骤:
在拟显示位置添加一个容器;
将将相关功能栏从父容器中移除;
将相关功能栏添加到新添加的容器中。
下面是将功能栏显示在B4XTable表格下面B4J代码:
B4XTable1.SearchVisible=True
Dim p As B4XView=B4XTable1.lblBack.Parent
p.SetColorAndBorder(xui.Color_White,1,xui.Color_Black,3)
p.RemoveViewFromParent
Pane1.AddNode(p,0,0,200,40)
B4XTable1.SearchField.mBase.RemoveViewFromParent
Pane1.AddNode(B4XTable1.SearchField.mBase,200,0,100,40)
B4XTable1.lblFromTo.RemoveViewFromParent
Pane1.AddNode(B4XTable1.lblFromTo,310,0,150,40)
B4XTable1.pnlHeader.Visible=False
B4XTable1.mBase.Top=0-B4XTable1.pnlHeader.Height