首页 > 其他分享 >OpenHarmony 表格

OpenHarmony 表格

时间:2023-11-01 09:03:02浏览次数:34  
标签:OpenHarmony 表格 width tableStyle number value height item

ArkUI 没有表格,搞一个简单的

 

import resourceManager from '@ohos.resourceManager';
import prompt from '@ohos.prompt';

@Entry
@Component
struct Index {
  @State message: string = 'Hello World'
  @State screenWidth: number = 700
  @State screenHeight: number = 300
  @State tableData: any = []
  tableStyle = {
    x: 0, // 起始 x
    y: 0, // 起始 y
    cellHeight: 30, // 单元格高度
    width: 600, // 表格宽度
    height: 200, // 表格高度
    cols: 7, // 列数量(固定)
    rows: 0, // 行数量,需要计算
    cellWidth: 0, // 单元格宽度,需要计算
    value: '', // 值显
  }

  onPageShow() {
    // 处理 table 数据,获取能显示的行数
    this.tableStyle.rows = Math.floor(this.tableStyle.height / this.tableStyle.cellHeight);
    // 根据行数重新调整行高
    this.tableStyle.cellHeight = Math.floor(this.tableStyle.height / this.tableStyle.rows);
    // 计算单元格宽度
    this.tableStyle.cellWidth = this.tableStyle.width / this.tableStyle.cols;

    // 循环压入数据
    let x, y;
    for (let i = 0; i < this.tableStyle.rows; i++) {
      // 重置 x
      x = this.tableStyle.x;
      // 更新 y
      y = this.tableStyle.y + i * this.tableStyle.cellHeight;
      for (let j = 0; j < this.tableStyle.cols; j++) {
        let temp = {
          x: x,
          y: y,
          value:  this.getValue('number'),
          width: this.tableStyle.cellWidth,
          height: this.tableStyle.cellHeight,
        };

        this.tableData.push(temp);
        //        console.info(`${x}, ${y}, ${temp.value}`)


        // 更新 x
        x += this.tableStyle.cellWidth;
      }

    }
  }

  updateValue() {
    prompt.showToast({ message: "update value" });

    this.tableData.forEach(item => {
      item.value = this.getValue('number');
      //      console.info(`${item.x}, ${item.y}, ${item.value}`)
    });

    this.message = this.getValue('number');
  }

  getValue(type) {
    switch (type) {
      case 'number':
        return Math.round(Math.random() * 10000000) + '';
    }
  }

  build() {
    Column() {
      Row() {
        ForEach(this.tableData, item => {
            Text(item.value)
              .position({ // 使用绝对定位,设置组件位置
                x: item.x,
                y: item.y,
              })
              .textAlign(TextAlign.Center) // 居中
              .maxLines(1)
              .textOverflow({overflow: TextOverflow.Ellipsis}) // 超出隐藏
              .width(item.width)
              .height(item.height)
              .fontColor('#000')
              .fontSize(24)
              .border({
                color: '#ddd',
                width: 1
              })
        });
      }
      .position({ // 使用绝对定位,设置组件位置
        x: 10,
        y: 20,
      })
      .width(this.tableStyle.width)
      .height(this.tableStyle.height)
      .border({
        width: 1,
        color: '#ddd',
      })


      Text(this.message)
        .fontSize(20)
        .fontWeight(FontWeight.Bold)
        .position({ // 使用绝对定位,设置组件位置
          x: 410,
          y: 250,
        })
      //        .visibility(Visibility.Hidden)

      Button('Click me')
        .width(120)
        .height(50)
        .onClick(() => {
          this.updateValue();
        })
        .position({ // 使用绝对定位,设置组件位置
          x: 150,
          y: 250,
        })
    }
    .width(this.screenWidth)
    .height(this.screenHeight)
    .border({ width: 1, color: '#ddd' })
  }

  aboutToAppear() {
  }

  aboutToDisappear() {
  }
}

 

效果:

 

再增加随机行上颜色(单双行颜色间隔、或者报警行高亮等场景):

 

 数据格式优化:

 

效果:

 

继续优化,增加分页等:

 

显示效果:

 

 

增加可配置列标题行,及动态分配 width。

 

效果:

 

标签:OpenHarmony,表格,width,tableStyle,number,value,height,item
From: https://www.cnblogs.com/guofan/p/17769355.html

相关文章

  • 解题报告 P3704 [SDOI2017] 数字表格
    P3704[SDOI2017]数字表格经典莫反。题目要求:\[\prod_{i=1}^n\prod_{j=1}^mfib(\gcd(i,j))\]不妨令\(n<m\)。套路地,我们设\(\gcd(i,j)=d\),然后枚举\(d\):\[\begin{aligned}&\quad\prod_{d=1}^n\prod_{i=1}^n\prod_{j=1}^mfib(d)^{[\gcd(i,j)==d]}\\&=\pr......
  • OpenHarmony 状态变量更改通知:@Watch 装饰器
    @Watch应用于对状态变量的监听。如果开发者需要关注某个状态变量的值是否改变,可以使用@Watch为状态变量设置回调函数。说明:从APIversion9开始,该装饰器支持在ArkTS卡片中使用。概述@Watch用于监听状态变量的变化,当状态变量变化时,@Watch的回调方法将被调用。@Watch......
  • Python自动化办公——3个Excel表格中每个门店物品不同,想要汇总在一起(方法二)
    大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Python自动化办公处理的问题,一起来看看吧。上一篇文章中,我们已经看到了两种解决办法了,这一篇文章我们一起来看看另外一种方法。二、实现过程这里【瑜亮老师】另外再给了一个代码和思路,如下所示:#读......
  • # yyds干货盘点 # Python自动化办公——3个Excel表格中每个门店物品不同,想要汇总在一
    大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Python自动化办公处理的问题,一起来看看吧。上一篇文章中,我们已经看到了两种解决办法了,这一篇文章我们一起来看看另外一种方法。二、实现过程这里【瑜亮老师】另外再给了一个代码和思路,如下所示:#读取Excel......
  • java根据模板生成表格和列表
    1、模板所有的标签都是以{{开始,以}}结束。{{template}}文本{{@template}}图片{{#template}}表格{{*template}}列表{{+template}}Word文档合并{{?template}}{{/template}}if和foreach功能 2、引入包<!--POI依赖使用xlsxxml的格式(即X......
  • # yyds干货盘点 #Python自动化办公——3个Excel表格中每个门店物品不同,想要汇总在一起
    大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Python自动化办公处理的问题,一起来看看吧。原始数据如下所示:二、实现过程这里【猫药师Kelly】给了一个代码和思路,如下所示:顺利地解决了粉丝的问题。下一篇文章,我们一起来看看另外一种方法。三、总结大家好,......
  • python,pandas ,openpyxl提取excel特定数据,合并单元格合并列,设置表格格式,设置字体颜色,
    python,pandas,openpyxl提取excel特定数据,合并单元格合并列,设置表格格式,设置字体颜色,代码importosimportnumpyimportpandasaspdimportopenpyxlfromopenpyxl.stylesimportFontfromopenpyxl.stylesimportBorder,Sidedefread(file):#读取表格A和表格B......
  • vue3 + vite 的Excel表格的导入导出
    一、安装XLSX插件yarnaddxlsx或者npmixlsx二、引入插件在你需要的页面或者在main.js中引入import*asXLSXfrom'xlsx'三、导出Excel3.1核心api①xlsx.utils.book_new() 新建工作簿② xlsx.uti......
  • Obsidian类typora实时预览表格插件
    原文地址:https://www.cnblogs.com/liqinglucky/p/obsidian-table-enhancer.html文档中经常用到表格。原来一直用的是typora编辑markdown,就想找一个markdown语法的表格,并且能实时预览编辑。1table enhancergithub项目:GitHub-Stardusten/ob-table-enhancer目前在obsidian的......
  • C#学习笔记之使用Access读取Excel表格
    一、读取Excel表的内容(使用DataSet)1.DataSet定义:表示数据在内存中的缓存。可以理解为,将从Excel表中读取出来的数据存入DataSet类中,之后对DataSet进行数据处理,能提高处理的速度。2.DataSet属性和方法:①属性CaseSensitive:获取或设置一个值,该值指示DataTable中的字符串是否区分......