Grid 展开 Detail - day18

https://ithelp.ithome.com.tw/upload/images/20211004/20138680ZZSPDF4jjU.png

之前范例执行结束如上所示,倘若我们希望点选学生即展开该学生成绩怎麽做?

Grid 显示 Detail

使用 Grid 所提供 setItemDetailsRenderer()方法扩展 Row,setItemDetailsRenderer()方法须传入的参数只有一个 Renderer
https://ithlp.ithome.com.tw/upload/images/20211004/20138680YoSc2GQBcK.png

Randerer

什麽是 Randerer?简言之,即是用以产制模版,使用该模版来渲染欲呈现的资料。Vaadin 提供各式 renderer

  • BasicRenderer
  • ComponentRenderer
  • IconRenderer
  • LocalDateRenderer
  • NativeButtonRenderer
  • NumberRenderer
  • TemplateRenderer
  • TextRenderer

ComponentRenderer

本例中,点选学生资料後,展开学生成绩,成绩使用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)

执行结果

https://ithelp.ithome.com.tw/upload/images/20211004/20138680ge1CONjUuh.png


<<:  【Day 24】建立 EKS on Outpost 的步骤(上)

>>:  [day21]讯息查询服务OrderPayQuery

Day 25-制作购物车之设计购物车画面

设计的部分就不多做分析,主要呈现实作成果。 因为太长了,所以分一点过来。 以下内容有参考教学影片,底...

[Day21] Tableau 轻松学 - Parameter

前言 有的时候我们会想让使用者输入一些参数,根据这些参数来做筛选或运算。到目前为止,我们没使用到这个...

Batch Processing (4) - Materialization of Intermediate State

Beyond MapReduce 尽管 MapReduce 在 2000 年以後很夯,但它毕竟是分散...

EP 26: MockData come back by (a little bit) DI design

Hello, 各位 iT邦帮忙 的粉丝们大家好~~~ 本篇是 Re: 从零开始用 Xamarin 技...

GitHub 操作介面介绍 - 让初学者轻松上手

本篇文章同步发布於个人部落格 (後续更新皆会以部落格为主):GitHub 操作介面介绍 上一篇文章我...