之前范例执行结束如上所示,倘若我们希望点选学生即展开该学生成绩怎麽做?
使用 Grid 所提供 setItemDetailsRenderer()
方法扩展 Row,setItemDetailsRenderer()
方法须传入的参数只有一个 Renderer
。
什麽是 Randerer?简言之,即是用以产制模版,使用该模版来渲染欲呈现的资料。Vaadin 提供各式 renderer
。
本例中,点选学生资料後,展开学生成绩,成绩使用Grid显示,任何组件皆是Component,所以在此选用ComponentRenderer<COMPONENT,SOURCE>
准备Renderer
val renderer = ComponentRenderer<Grid<Grade>, Student>{ data: Student ->
val gradeGrid = Grid<Grade>()
with(gradeGrid){
setDataLoader(data.grades)
}
gradeGrid
}
第一行,展开的学生成绩为资料来源 Grade
的 Grid。传入 ComponentRenderer
资料来源型态为 Student
第四行,设定资料来源
Student.kt
val grades: DataLoader<Grade> get() = Grade.dataLoader.withFilter { Grade::student_id eq id }
完整程序如下,这样就完成了可展开的学生成绩 grid 了
val renderer = ComponentRenderer<Grid<Grade>, Student>{ data: Student ->
val gradeGrid = Grid<Grade>()
with(gradeGrid){
setDataLoader(data.grades)
addColumnFor(Grade::description).setHeader("学期")
addColumnFor(Grade::mandarin).setHeader("国文")
addColumnFor(Grade::english).setHeader("英文")
addColumnFor(Grade::math).setHeader("数学")
addColumnFor(Grade::pe).setHeader("体育")
isExpand = true
isHeightByRows = true
}
gradeGrid
}
setItemDetailsRenderer(renderer)
<<: 【Day 24】建立 EKS on Outpost 的步骤(上)
>>: [day21]讯息查询服务OrderPayQuery
设计的部分就不多做分析,主要呈现实作成果。 因为太长了,所以分一点过来。 以下内容有参考教学影片,底...
前言 有的时候我们会想让使用者输入一些参数,根据这些参数来做筛选或运算。到目前为止,我们没使用到这个...
Beyond MapReduce 尽管 MapReduce 在 2000 年以後很夯,但它毕竟是分散...
Hello, 各位 iT邦帮忙 的粉丝们大家好~~~ 本篇是 Re: 从零开始用 Xamarin 技...
本篇文章同步发布於个人部落格 (後续更新皆会以部落格为主):GitHub 操作介面介绍 上一篇文章我...