【问题标题】:Sorting Column Values in Flutter DataTable对 Flutter DataTable 中的列值进行排序
【发布时间】:2020-08-17 03:43:50
【问题描述】:

我在对 DataTable 中的列进行排序时遇到严重困难。

这是我的代码

  SingleChildScrollView(
  scrollDirection: Axis.horizontal,
  child: DataTable(
    sortColumnIndex: 0,
    sortAscending: true,

    columnSpacing: 5.0,
      horizontalMargin: 10,
    columns: [
      DataColumn(label: Text('Col1'),          
      DataColumn(label: Text('Col2'),numeric: false ),
      DataColumn(label: Text('Col3'),numeric: true ),
      DataColumn(label: Text('Col4'), numeric: true),
      DataColumn(label: Text('Col5'), numeric: true),
    ],
    rows: myList
        .map(
        ((element) => DataRow(
          cells: <DataCell>[
            DataCell(Text(element["Col1"]), placeholder: true,showEditIcon: false),
            DataCell(Text(element["Col2"].toString())),
            DataCell(Text(element["Col3"].toString())),
            DataCell(Text(element["Col4"].toString())),
            DataCell(Text(element["Col5"].toString())),
          ],
        )),
    ).toList(),
  ),
));

我还要做什么?理想情况下,我希望在用户按下的任何列上都有排序功能,但现在,我很高兴只有 1 列可以排序。

如你所见,我已经添加了约束:

    sortColumnIndex: 0,
    sortAscending: true,

但我得到的只是第一列附近的一个箭头 (ColumnIndex = 0) - 当你按下它时它实际上什么也没做。

我做错了什么?

【问题讨论】:

  • myList 是地图列表?
  • 传递 sortColumnIndex 只会影响标题行中的指示箭头。数据行不会自动排序。你应该sort the data manually 然后打电话给setState
  • 谢谢。如何手动对数据进行排序?我遇到的问题是 myList 不是来自 class 。它不是从类中实例化的。 IE。我无法调用 myList.myElement 等语法

标签: sorting flutter dart datatable


【解决方案1】:

您必须在要排序的列中添加一个“onSort:,”,然后调用排序函数。

bool sort;

DataTable(
        sortAscending: sort,
        sortColumnIndex: 0,
        columns: [
          DataColumn(
              label: Text("Col1"),
              onSort: (columnIndex, ascending) {
                setState(() {
                  sort = !sort;
                });
                onSortColum(columnIndex, ascending);
              }),
...

还有 onSortColum 函数:

onSortColum(int columnIndex, bool ascending) {
    if (columnIndex == 0) {
      if (ascending) {
        yourDataList.sort((a, b) => a['name'].compareTo(b['name']));
      } else {
        yourDataList.sort((a, b) => b['name'].compareTo(a['name']));
      }
    }
  }

希望有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    相关资源
    最近更新 更多