You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PrimeReact DataTable中展示所有stdCtExamMarks数据?

问题:如何在PrimeReact DataTable中展示所有学生的考试成绩数据

你现在的代码只提取了第一个学生的stdCtExamMarks数组,所以只能看到单个学生的成绩。要展示所有学生的成绩,我们需要先把所有学生的成绩数据整合起来,或者用嵌套表格的方式呈现,下面给你两种可行的方案:

先看你当前的代码参考:

构造函数代码

constructor() { 
  super(); 
  this.exportpdf = this.exportpdf.bind(this); 
  this.state = { 
    sales: [ 
      { 
        customStudentId: "2064517", 
        studentRoll: 26, 
        studentName: "Md. Faiaz Jakir ", 
        stdCtExamMarks: [ 
          { 
            viewSerial: 1, 
            subjectName: "Bangla ", 
            subjectFullMark: 25, 
            obtainedMark: 0, 
            highestMarks: 25 
          } 
        ] 
      }, 
      { 
        customStudentId: "2065817", 
        studentRoll: 27, 
        studentName: "Miraj Bin Atik ", 
        stdCtExamMarks: [ 
          { 
            viewSerial: 1, 
            subjectName: "English ", 
            subjectFullMark: 25, 
            obtainedMark: 0, 
            highestMarks: 25 
          } 
        ] 
      } 
    ] 
  }; 
}

当前的DataTable代码

<DataTable value={this.state.sales[0].stdCtExamMarks}> 
  <Column field="subjectName" header="Subject" /> 
  <Column field="subjectFullMark" header="Full Mark" /> 
  <Column field="obtainedMark" header="Obtained Mark" /> 
  <Column field="highestMarks" header="Highest Mark" /> 
</DataTable>

方案1:合并所有学生的成绩数据(推荐)

这种方式会把每个学生的成绩项和学生基本信息(学号、姓名等)合并成一个统一的数组,让DataTable可以一次性展示所有成绩,还能区分每个成绩属于哪个学生。

修改后的代码如下:

render() {
  // 遍历所有学生,把每个学生的成绩项和个人信息合并
  const allStudentMarks = this.state.sales.flatMap(student => {
    return student.stdCtExamMarks.map(mark => ({
      ...mark, // 展开成绩数据
      // 加入学生基本信息
      studentRoll: student.studentRoll,
      studentName: student.studentName,
      customStudentId: student.customStudentId
    }));
  });

  return (
    <DataTable value={allStudentMarks}>
      {/* 新增学生信息列,方便区分 */}
      <Column field="studentRoll" header="Roll No" />
      <Column field="studentName" header="Student Name" />
      <Column field="subjectName" header="Subject" />
      <Column field="subjectFullMark" header="Full Mark" />
      <Column field="obtainedMark" header="Obtained Mark" />
      <Column field="highestMarks" header="Highest Mark" />
    </DataTable>
  );
}

如果希望按学生分组展示,只需要给DataTable加上groupBy属性即可:

<DataTable value={allStudentMarks} groupBy="studentName">
  {/* 列定义和上面一致 */}
</DataTable>

方案2:嵌套DataTable(按学生独立展示成绩)

如果你希望每个学生占据一行,然后在该行内展示该学生的所有成绩,可以用嵌套表格的方式实现:

<DataTable value={this.state.sales}>
  <Column field="studentRoll" header="Roll No" />
  <Column field="studentName" header="Student Name" />
  {/* 嵌套表格列,展示当前学生的成绩 */}
  <Column header="Exam Marks">
    {(rowData) => (
      <DataTable value={rowData.stdCtExamMarks} size="small">
        <Column field="subjectName" header="Subject" />
        <Column field="subjectFullMark" header="Full Mark" />
        <Column field="obtainedMark" header="Obtained Mark" />
        <Column field="highestMarks" header="Highest Mark" />
      </DataTable>
    )}
  </Column>
</DataTable>

这种方式适合需要清晰区分每个学生成绩组的场景,外层表格展示学生基本信息,内层表格展示对应学生的各科成绩。


内容的提问来源于stack exchange,提问作者Aarif Hasan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:09:25