【ag-grid-vue】column

网格中的每一列都使用列定义(ColDef)来定义。列根据在网格选项中指定的列定义的顺序在网格中定位。

列定义

 下面的例子展示了一个定义了3列的简单网格:

<template>
  <ag-grid-vue
    style="height: 300px; width: 1000px"
    class="ag-theme-balham"
    :columnDefs="columnDefs"
    :rowData="rowData"
    @grid-ready="onGridReady"
  ></ag-grid-vue>
</template>

<script>
import { AgGridVue } from "ag-grid-vue";
export default {
  name: "AgTable",
  components: {
    AgGridVue,
  },
  data() {
    return {
      gridApi: null,
      columnDefs: [{ field: "athlete" }, { field: "sport" }, { field: "age" }],
      rowData: [
        { athlete: "athlete-01", sport: "sport-01", age: "age-01" },
        { athlete: "athlete-02", sport: "sport-02", age: "age-02" },
      ],
    };
  },
  methods: {
    onGridReady(params) {
      this.gridApi = params.api;
      this.gridApi.sizeColumnsToFit();
    },
  },
};
</script>

列头分组

如果你想对列进行分组,你可以像这样将它们作为子列包含: 

 columnDefs: [
        {
          headerName: "Group A",
          children: [
            { field: "athlete" },
            { field: "sport" },
            { field: "age" },
          ]
        }
      ]

效果 

 访问行数据值

colDef。字段属性用于访问行数据对象中的值。在大多数情况下,字段将是来自行数据对象的属性名。但是,如果行数据包含嵌套对象,则可以使用点表示法引用深层属性值。

例如,如果行数据有一个对象属性奖牌,其中包含个人奖牌数,那么要显示获得的金牌,请使用字段值'medal .gold'。

使用规则 

<ag-grid-vue
    :rowData="rowData"
    :columnDefs="columnDefs"
</ag-grid-vue>

this.rowData = [
    {
        athlete: 'Michael Phelps',
        medals: {
            gold: 8, silver: 1, bronze: 0
        }
    }
];
this.columnDefs = [
    { field: 'athlete' },
    // Using dot notation to access nested property
    { field: 'medals.gold', headerName: 'Gold' },
];

 示例

<template>
  <ag-grid-vue
    style="height: 200px; width: 1000px"
    class="ag-theme-balham"
    :columnDefs="columnDefs"
    :rowData="rowData"
    @grid-ready="onGridReady"
  ></ag-grid-vue>
</template>

<script>
import { AgGridVue } from "ag-grid-vue";
export default {
  name: "AgTable",
  components: {
    AgGridVue,
  },
  data() {
    return {
      gridApi: null,
      columnDefs: [
        { field: "name" },
        { field: "medals.gold", headerName: "Gold" },
        { field: "person.age" },
      ],
      rowData: [
        {
          name: "Michael Phelps",
          person: {
            age: 23,
            country: "United States",
          },
          medals: {
            gold: 8,
            silver: 0,
            bronze: 0,
          },
        },
        {
          name: "Michael Phelps",
          person: {
            age: 19,
            country: "United States",
          },
          medals: {
            gold: 6,
            silver: 0,
            bronze: 2,
          },
        },
        {
          name: "Michael Phelps",
          person: {
            age: 27,
            country: "United States",
          },
          medals: {
            gold: 4,
            silver: 2,
            bronze: 0,
          },
        },
      ],
    };
  },
  methods: {
    onGridReady(params) {
      this.gridApi = params.api;
      this.gridApi.sizeColumnsToFit();
    },
  },
};
</script>

 效果

自定义列类型

除了上述特性之外,网格还提供了其他方法来帮助简化和避免重复的列定义。这是通过以下方式完成的:

  • defaultColDef:包含所有列将继承的属性。
  • defaultColGroupDef:包含所有列组将继承的属性。
  • columnTypes:包含列定义可以继承的属性的特定列类型。

默认列和列类型可以指定列上可用的任何列属性。

 注意:列类型被设计为仅对列工作,即它们不会应用于列组。

 下面的代码片段演示了这三个属性:

<ag-grid-vue
    :columnDefs="columnDefs"
    :defaultColDef="defaultColDef"
    :defaultColGroupDef="defaultColGroupDef"
    :columnTypes="columnTypes"
    /* other grid options ... */>
</ag-grid-vue>

this.columnDefs = [
    // uses the default column properties
    { headerName: 'Col A', field: 'a'},
    // overrides the default with a number filter
    { headerName: 'Col B', field: 'b', filter: 'agNumberColumnFilter' },
    // overrides the default using a column type
    { headerName: 'Col C', field: 'c', type: 'nonEditableColumn' },
    // overrides the default using a multiple column types
    { headerName: 'Col D', field: 'd', type: ['dateColumn', 'nonEditableColumn'] }
];

// a default column definition with properties that get applied to every column
this.defaultColDef = {
    // set every column width
    width: 100,
    // make every column editable
    editable: true,
    // make every column use 'text' filter by default
    filter: 'agTextColumnFilter',
};

// a default column group definition with properties that get applied to every column group 
this.defaultColGroupDef = {
  marryChildren: true,
};

// define a column type (you can define as many as you like)
this.columnTypes = {
    nonEditableColumn: { editable: false },
    dateColumn: {
        filter: 'agDateColumnFilter',
        filterParams: { comparator: myDateComparator },
        suppressMenu: true
    }
};

当网格创建列时,它从默认列定义开始,然后添加在启用Cell Data Type上定义的属性,然后添加通过列类型定义的属性,最后添加来自特定列定义的属性。

在每个阶段,如果已经存在列属性,则后者将覆盖现有值。例如,如果defaultColDef设置为edit: true,但columnType设置为edit: false,则该列将不可编辑。 

例如,下面是创建上面所示的“Col C”时使用的步骤大纲:

// Step 1: the grid starts with an empty definition
{}

// Step 2: default column properties are merged in
{ width: 100, editable: true, filter: 'agTextColumnFilter' }

// Step 3: column type properties are merged in (using the 'type' property), overriding where necessary
{ width: 100, editable: false, filter: 'agTextColumnFilter' }

// Step 4: finally column definition properties are merged in, overriding where necessary
{ headerName: 'Col C', field: 'c', width: 100, editable: false, filter: 'agTextColumnFilter' }

 下面的示例演示了不同的配置属性

1. 普通设置(不设置默认值)

<template>
  <ag-grid-vue
    style="width: 100%; height: 100%"
    class="ag-theme-alpine"
    :columnDefs="columnDefs"
    @grid-ready="onGridReady"
    :rowData="rowData"
  ></ag-grid-vue>
</template>

<script>
import { AgGridVue } from "ag-grid-vue";

export default {
  name: "AgTable",
  components: {
    AgGridVue,
  },
  data() {
    return {
      gridApi: null,
      columnDefs: [
        { field: "athlete" },
        { field: "sport" },
        { field: "age", type: "numberColumn" },
        { field: "year", type: "numberColumn" },
        {
          field: "date",
          type: ["dateColumn", "nonEditableColumn"],
          width: 220,
        },
        {
          headerName: "Medals",
          groupId: "medalsGroup",
          children: [
            { headerName: "Gold", field: "gold", type: "medalColumn" },
            { headerName: "Silver", field: "silver", type: "medalColumn" },
            { headerName: "Bronze", field: "bronze", type: "medalColumn" },
            {
              headerName: "Total",
              field: "total",
              type: "medalColumn",
              // 该列是可折叠的
              columnGroupShow: "closed",
            },
          ],
        },
      ],
      gridApi: null,
      columnApi: null,
      defaultColDef: {
        // 设置默认列宽度
        width: 150,
        // 使每个列都可编辑
        editable: true,
        // 让每个列默认使用'text'过滤器
        filter: "agTextColumnFilter",
        // 默认情况下启用浮动过滤器
        floatingFilter: true,
        // 调整列的大小
        resizable: true,
        // 禁用单元格数据类型
        cellDataType: false,
      },
      defaultColGroupDef: null,
      columnTypes: null,
      rowData: null,
    };
  },
  methods: {
    onGridReady(params) {
      this.gridApi = params.api;
      // this.gridApi.sizeColumnsToFit();
      this.gridColumnApi = params.columnApi;
      const updateData = (data) => params.api.setRowData(data);
      fetch("https://www.ag-grid.com/example-assets/olympic-winners.json")
        .then((resp) => resp.json())
        .then((data) => updateData(data));
    },
  },
  created() {
    this.defaultColGroupDef = {
      marryChildren: true,
    };
    this.columnTypes = {
      numberColumn: { width: 130, filter: "agNumberColumnFilter" },
      medalColumn: { width: 100, columnGroupShow: "open", filter: false },
      nonEditableColumn: { editable: false },
      dateColumn: {
        // specify we want to use the date filter
        filter: "agDateColumnFilter",
        // add extra parameters for the date filter
        filterParams: {
          // provide comparator function
          comparator: (filterLocalDateAtMidnight, cellValue) => {
            // In the example application, dates are stored as dd/mm/yyyy
            // We create a Date object for comparison against the filter date
            const dateParts = cellValue.split("/");
            const day = Number(dateParts[0]);
            const month = Number(dateParts[1]) - 1;
            const year = Number(dateParts[2]);
            const cellDate = new Date(year, month, day);
            // Now that both parameters are Date objects, we can compare
            if (cellDate < filterLocalDateAtMidnight) {
              return -1;
            } else if (cellDate > filterLocalDateAtMidnight) {
              return 1;
            } else {
              return 0;
            }
          },
        },
      },
    };
  },
};
</script>

 效果

2. 添加默认设置 defaultColDef 

<template>
  <ag-grid-vue
    style="width: 100%; height: 100%"
    class="ag-theme-alpine"
    :columnDefs="columnDefs"
    @grid-ready="onGridReady"
    :defaultColDef="defaultColDef"
    :rowData="rowData"
  ></ag-grid-vue>
</template>
defaultColDef: {
        // 设置默认列宽度
        width: 150,
        // 使每个列都可编辑
        editable: true,
        // 让每个列默认使用'text'过滤器
        filter: "agTextColumnFilter",
        // 默认情况下启用浮动过滤器
        floatingFilter: true,
        // 调整列的大小
        resizable: true,
        // 禁用单元格数据类型
        cellDataType: false,
      },

 效果

3.  defaultColGroupDef

 Marry Children

有时您希望组的列始终粘在一起。要实现这一点,请设置列组属性marryChildren=true。下面的例子演示了以下内容:

'Medals'有marryChildren=true。
如果在这些组中移动列,则无法将列移出组。例如,如果你拖拽'Gold',就不可能把它拖出'Medals'组。
如果移动非组列,例如Silver,则不可能将其放置在组的中间,因此不可能将组分开。

 举例:

1. 没有设置defaultColGroupDef

 初始状态

 拖动列“Silver”后

 2. 设置defaultColGroupDef

<template>
  <ag-grid-vue
    style="width: 100%; height: 100%"
    class="ag-theme-alpine"
    :columnDefs="columnDefs"
    @grid-ready="onGridReady"
    :defaultColDef="defaultColDef"
    :defaultColGroupDef="defaultColGroupDef"
    :rowData="rowData"
  ></ag-grid-vue>
</template>

created() {
  this.defaultColGroupDef = {
    marryChildren: true,
  };
}

 初始状态

  拖动列“Silver”后

 

4. columnTypes 

<template>
  <ag-grid-vue
    style="width: 100%; height: 100%"
    class="ag-theme-alpine"
    :columnDefs="columnDefs"
    @grid-ready="onGridReady"
    :defaultColDef="defaultColDef"
    :defaultColGroupDef="defaultColGroupDef"
    :columnTypes="columnTypes"
    :rowData="rowData"
  ></ag-grid-vue>
</template>

 created() {
    this.columnTypes = {
      numberColumn: { width: 130, filter: "agNumberColumnFilter" },
      medalColumn: { width: 100, columnGroupShow: "open", filter: false },
      nonEditableColumn: { editable: false },
      dateColumn: {
        // specify we want to use the date filter
        filter: "agDateColumnFilter",
        // add extra parameters for the date filter
        filterParams: {
          // provide comparator function
          comparator: (filterLocalDateAtMidnight, cellValue) => {
            // In the example application, dates are stored as dd/mm/yyyy
            // We create a Date object for comparison against the filter date
            const dateParts = cellValue.split("/");
            const day = Number(dateParts[0]);
            const month = Number(dateParts[1]) - 1;
            const year = Number(dateParts[2]);
            const cellDate = new Date(year, month, day);
            // Now that both parameters are Date objects, we can compare
            if (cellDate < filterLocalDateAtMidnight) {
              return -1;
            } else if (cellDate > filterLocalDateAtMidnight) {
              return 1;
            } else {
              return 0;
            }
          },
        },
      },
    };
  },

 示例

右对齐和数字列

网格为向右对齐列提供了方便的快捷方式。将列定义类型设置为rightalaligned将列标头和内容向右对齐,这使得用户更容易扫描数据。 

注意:

因为右对齐用于数字,所以我们还提供了一个别名numericColumn,可用于将标题和单元格文本向右对齐。 

使用规则 

<ag-grid-vue
    :columnDefs="columnDefs"
</ag-grid-vue>

this.columnDefs = [
    { headerName: 'Column A', field: 'a' },
    { headerName: 'Column B', field: 'b', type: 'rightAligned' },
    { headerName: 'Column C', field: 'c', type: 'numericColumn' },
];

 右对齐列类型通过设置标题和单元格类属性来工作,如下所示。如果您手动设置headerClass或cellClass,那么您可能需要自己包含右对齐的CSS类,因为列类型属性被显式定义的列属性覆盖。

rightAligned: {
    headerClass: 'ag-right-aligned-header',
    cellClass: 'ag-right-aligned-cell'
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/93497.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信开发之一键创建微信群聊的技术实现

创建微信群 本接口为敏感接口&#xff0c;请查阅调用规范手册创建后&#xff0c;手机上不会显示该群&#xff0c;往该群主动发条消息手机即可显示。 请求URL&#xff1a; http://域名地址/createChatroom 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-…

QT通过ODBC连接GBase 8s数据库(Windows)示例

示例环境&#xff1a; 操作系统&#xff1a;Windows 10 64位数据库及CSDK版本&#xff1a;GBase 8s V8.8_3.0.0_1 64位QT&#xff1a;5.12.0 64位 1&#xff0c;CSDK安装及ODBC配置 1.1&#xff0c;免安装版CSDK 下载免安装版的CSDK驱动&#xff0c;地址&#xff1a;https:…

(vue)el-table 怎么把表格列中相同的数据 合并为一行

(vue)el-table 怎么把表格列中相同的数据 合并为一行 效果&#xff1a; 文档解释&#xff1a; 写法&#xff1a; <el-table:data"tableData"size"mini"class"table-class"borderstyle"width:100%"max-height"760":span-…

【应用层】网络基础 -- HTTPS协议

HTTPS 协议原理加密为什么要加密常见的加密方式对称加密非对称加密 数据摘要&&数据指纹 HTTPS 的工作过程探究方案1-只使用对称加密方案2-只使用非对称加密方案3-双方都使用非对称加密方案4-非对称加密对称加密中间人攻击-针对上面的场景 CA认证理解数据签名方案5-非对…

【Django】 Task5 DefaultRouter路由组件和自定义函数

文章目录 【Django】 Task5 DefaultRouter路由组件和自定义函数1.路由组件1.1路由组件介绍1.2SimpleRouter1.3DefaultRouter1.4DefaultRouter示例1.5查看访问服务接口url 2.自定义函数 【Django】 Task5 DefaultRouter路由组件和自定义函数 Task5 主要了解了DefaultRouter路由…

sql语句中的ddl和dml

操作数据库&#xff1a;CRUD C&#xff08;create&#xff09; 创建 *数据库创建出来默认字符集为utf8 如果要更改字符集就 Create database 名称 character set gbk&#xff08;字符集&#xff09; *创建数据库&#xff1a;create database 名称 *先检查是否有该数据库在…

Mac常见恶意软件再现,办公应用程序潜藏风险如何防范?

Mac电脑正受到臭名昭著的XLoader恶意软件的新变种的攻击&#xff0c;该恶意软件已被重写为在最好的MacBook上本地运行。 虽然XLoader至少从2015年开始出现&#xff0c;但在2021年发现macOS变体之前&#xff0c;它主要用于针对Windows PC。然而&#xff0c;该版本是作为Java程序…

go:正确引入自己编写的包(如何在 Go 中正确引入自己编写的包)

前言 目录如下&#xff1a; 具体教程 1. 工作空间&#xff08;我的是根目录&#xff09;新建 go.work 文件 文件内容如下&#xff1a; go 1.21.0use (./tuchuang./tuchuang/testm ) 2. 添加go.mod文件 1. 包文件夹下 进入testm目录执行 go mod init testModule 2. 引用目…

订单状态定时处理、来单提醒和客户催单

一、Spring Task 1.1 基本介绍 1.2 cron表达式 cron表达式其实就是一个字符串&#xff0c;通过cron表达式可以定义任务触发的时间 构成规则&#xff1a;分为6或7个域&#xff0c;由空格分隔开&#xff0c;每个域代表一个含义 每个域的含义分别为&#xff1a;秒、分钟、小时、日…

力扣 337. 打家劫舍 III

题目来源&#xff1a;https://leetcode.cn/problems/house-robber-iii/description/ C题解1&#xff08;来源代码随想录&#xff09;&#xff1a;本题一定是要后序遍历&#xff0c;因为通过递归函数的返回值来做下一步计算。本题关键是要讨论当前节点抢还是不抢。如果抢了当前节…

ubuntu20.04 直接安装vpp23.06 测试双 VPP Tunnel Ike2

环境信息&#xff1a;VMware Workstation 17 Pro ubuntu20.04 (清华源) ubuntu 源点进去选&#xff1a;ubuntu-22.04.3-desktop-amd64.iso 如果之前装过VPP&#xff0c;用以下命令确定是否卸载干净&#xff1a; dpkg -l | grep vpp dpkg -l | grep DPDK 卸载&#xff1a; …

数据采集:selenium 获取某网站CDN 商家排名信息

写在前面 工作中遇到&#xff0c;简单整理理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#xff0c;是人的逃避方式&#xff0c;是对大…

系统架构:数据库

文章目录 数据库设计关系代数规范化理论求候选键特殊函数依赖Armstrong公理范式无损分解 数据库设计 步骤产出说明1.根据数据要求和处理要求进行需求分析数据流图、数据字典、需求说明书等分析数据流向、数据详细含义等&#xff0c;分析具体需求2.对现实世界进行抽象&#xff0…

你对SPA单页面的理解,它的优缺点分别是什么?如何实现SPA应用呢?

一、什么是SPA SPA&#xff08;single-page application&#xff09;&#xff0c;翻译过来就是单页应用SPA是一种网络应用程序或网站的模型&#xff0c;它通过动态重写当前页面来与用户交互&#xff0c;这种方法避免了页面之间切换打断用户体验在单页应用中&#xff0c;所有必…

基于Java+SpringBoot+Vue前后端分离工厂车间管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

代码随想录算法训练营第四十六天 | 139.单词拆分

代码随想录算法训练营第四十六天 | 139.单词拆分 139.单词拆分 139.单词拆分 题目链接 视频讲解 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典…

lnmp架构-mysql1

1.MySQL数据库编译 make完之后是这样的 mysql 初始化 所有这种默认不在系统环境中的路径里 就这样加 这样就可以直接调用 不用输入路径调用 2.初始化 重置密码 3.mysql主从复制 配置master 配置slave 当master 端中还没有插入数据时 在server2 上配slave 此时master 还没进…

研磨设计模式day12迭代器模式

目录 场景 解决方案 解决思路 代码示例 代码改造 Java实现迭代器 迭代器模式的优点 思考 何时选用 场景 大公司收购了一个小公司&#xff0c;大公司的工资系统采用List来记录工资列表&#xff0c;而小公司是采用数组&#xff0c;老板希望通过决策辅助系统来统一查看…

Spring事务的隔离级别

使用事务隔离级别可以控制并发事务在同时执行时的某种行为。 前言&#xff1a; 在学习Spring事务隔离级别前我们先了解一下什么是脏读&#xff0c;幻读&#xff0c;不可重复读。 脏读&#xff1a; 一个事务读到另一个事务未提交的更新数据&#xff0c;所谓脏读&#xff0c;就…

软件测试用例经典方法 | 逻辑覆盖测试法及案例【文末赠书】

逻辑覆盖测试法是常用的一类白盒测试方法&#xff0c;其以程序内部逻辑结构为基础&#xff0c;通过对程序逻辑结构的遍历来实现程序测试的覆盖。逻辑覆盖测试法要求测试人员对程序的逻辑结构有清晰的了解。 逻辑覆盖测试法是一系列测试过程的总称&#xff0c;是使测试过程逐渐…