vxeTable 复选框分页数据记忆选中问题

先介绍一下表格的配置

需要添加checkbox-change事件

配置checkbox-config的reserve和checkRowKeys属性,checkRowKeys的值为selectionRows,用于盛放我们要选中的数据id

着重介绍一下selectChangeEvent事件

  selectChangeEvent({ checked, records, reserves, row }) {
      if (checked) {
        //第一次选数据,还未进行翻页时
        if (reserves.length == 0) {
            //选中的行id数组
          this.selectedRowKeys = records.map((v) => v.id);
            //选中的行数据
          this.selectionRows = records;
        } else {
          //id集合,翻页存在已选中的数据时,拼接新选中的数据
          this.selectedRowKeys = [
            ...reserves.map((v) => v.id),
            ...records.map((v) => v.id),
          ];
          //数据集合,翻页存在已选中的数据时,拼接新选中的数据
          this.selectionRows = [...reserves, ...records];
        }
        console.log(this.selectionRows);
        console.log(this.selectedRowKeys);
      } else {
        //取消选中时
        let idIndex = this.selectedRowKeys.indexOf(row.id);
        if (idIndex > -1) {
          //删除取消选中删除指定元素id
          this.$delete(this.selectedRowKeys, idIndex);
        }

        let dataIndex = null;
        for (let i = 0; i < this.selectionRows.length; i++) {
          if (this.selectionRows[i].id == row.id) {
            dataIndex = i;
            break;
          }
        }
        //删除取消选中的元素整个对象
        this.$delete(this.selectionRows, dataIndex);
        console.log(this.selectionRows);
        console.log(this.selectedRowKeys);
      }
    },

写到这里我们已经成功了一大部分了,但是还没达到我们想要的效果,最重要的是最后一步,就是在分页事件中给我们已经选中的数据添加选中状态

//selectList为已经选中的数据 
this.selectList.forEach((item) => {
            //tableData为表格数据
            this.tableData.forEach((it) => {
              if (item.id == it.id) {
                //翻页选中逻辑
                this.$refs.table.setCheckboxRow(it, true);
                console.log(item);
              }
            });
          });

 上面的方法写到翻页的查询逻辑中

这样我们就实现了vxeTable表格翻页后记忆选中行功能了

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
可以使用Python的Tkinter库中的Treeview控件实现对查询数据分页显示,并在首列添加复选框,同时也可以获取被选中的行对应的行信息。 以下是一个简单的示例代码: ```python import tkinter as tk from tkinter import ttk class Page(ttk.Frame): def __init__(self, parent): ttk.Frame.__init__(self, parent) self.parent = parent self.page = 1 self.total_pages = 0 self.data = [] self.create_widgets() def create_widgets(self): # 创建表格 self.treeview = ttk.Treeview(self, show="headings") self.treeview["columns"] = ("checkbox", "column1", "column2", "column3") self.treeview.column("checkbox", width=50) self.treeview.column("column1", width=150) self.treeview.column("column2", width=150) self.treeview.column("column3", width=150) self.treeview.heading("checkbox", text="选择") self.treeview.heading("column1", text="列1") self.treeview.heading("column2", text="列2") self.treeview.heading("column3", text="列3") self.treeview.pack(side="top", fill="both", expand=True) # 创建分页按钮 self.prev_button = ttk.Button(self, text="<<上一页", command=self.prev_page) self.prev_button.pack(side="left", padx=5, pady=5) self.page_label = ttk.Label(self, text="") self.page_label.pack(side="left", padx=5, pady=5) self.next_button = ttk.Button(self, text="下一页>>", command=self.next_page) self.next_button.pack(side="left", padx=5, pady=5) # 创建全选按钮 self.select_all_button = ttk.Button(self, text="全选", command=self.select_all) self.select_all_button.pack(side="right", padx=5, pady=5) def set_data(self, data, page_size=10): # 设置数据和每页数据数量,计算总页数 self.data = data self.page_size = page_size self.total_pages = (len(data) + page_size - 1) // page_size self.page = 1 self.show_data() def show_data(self): # 显示当前页数据 start = (self.page - 1) * self.page_size end = min(start + self.page_size, len(self.data)) for i in self.treeview.get_children(): self.treeview.delete(i) for row in self.data[start:end]: self.treeview.insert("", "end", values=row) # 更新分页按钮和页码信息 self.page_label.config(text="第{}页,共{}页".format(self.page, self.total_pages)) self.prev_button.config(state="disabled" if self.page == 1 else "normal") self.next_button.config(state="disabled" if self.page == self.total_pages else "normal") def prev_page(self): # 上一页 self.page -= 1 self.show_data() def next_page(self): # 下一页 self.page += 1 self.show_data() def select_all(self): # 全选 for i in self.treeview.get_children(): self.treeview.set(i, "checkbox", "1") def get_checked_rows(self): # 获取被选中的行对应行信息 checked_rows = [] for i in self.treeview.get_children(): if self.treeview.set(i, "checkbox") == "1": checked_rows.append(self.treeview.item(i, "values")) return checked_rows if __name__ == "__main__": # 示例数据 data = [] for i in range(1, 101): data.append(("row{}".format(i), "value{}".format(i), "data{}".format(i))) # 创建窗口和分页控件 root = tk.Tk() root.title("分页控件示例") page = Page(root) page.pack(side="top", fill="both", expand=True) # 设置数据和每页数据数量 page.set_data(data) # 获取被选中的行对应行信息 def get_checked_rows(): checked_rows = page.get_checked_rows() print(checked_rows) # 创建获取被选中的行按钮 get_checked_rows_button = ttk.Button(root, text="获取被选中的行", command=get_checked_rows) get_checked_rows_button.pack(side="bottom", padx=5, pady=5) root.mainloop() ``` 在这个示例代码中,我们首先创建了一个`Page`类,它继承自Tkinter库中的`ttk.Frame`类。在`Page`类中,我们创建了一个`Treeview`控件作为表格,它有四列,分别为复选框、列1、列2和列3。我们还创建了三个按钮,用于分页和全选操作。在`set_data`方法中,我们设置了数据和每页数据数量,计算出总页数。在`show_data`方法中,我们根据当前页码显示当前页的数据,并更新分页按钮和页码信息。在`get_checked_rows`方法中,我们遍历表格中的所有行,找出被选中的行,并将它们的信息添加到`checked_rows`列表中。最后,在窗口中创建了一个获取被选中的行的按钮,并将它与`get_checked_rows`方法关联起来。这样,当用户点击该按钮时,就可以获取被选中的行对应的行信息了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端你鹏哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值