我正在使用Material UI DataGrid,其中一列包含日期。Material UI documentation要求在列数组中将类型设置为“date”,我已经完成了:
{
field: "submittedAt",
headerName: "Submitted",
minWidth: 150,
flex: 2,
type: "date",
headerClassName: "tableHeader",
cellClassName: "hoverPointer"
}
然后,我使用Luxon将时间戳转换为MM/dd/yyyy格式
if (r.data().submittedAt) {
const d = DateTime.fromMillis(r.data().submittedAt.toMillis());
requestedDate = d.toFormat('MM/dd/yyyy')
}
然后使用requestedDate
设置列中单元格的值。当我对数据进行排序时,列仍然是按字符串比较器排序,而不是按日期排序:
我不知道我做错了什么,而且我似乎在文档或以前的帖子中找不到太多的支持。我知道我可以将日期设置为yyyy/MM/dd,这样字符串比较器就可以工作了,但我不希望为了可读性而呈现这种格式。我还需要列可以由用户动态排序,所以服务器端排序也帮不了我。提前感谢您的帮助。
3条答案
按热度按时间g2ieeal71#
我做了什么:
这样,您需要做的调整是最小的(只是呈现代码)
测试:
试验数据:
yfjy0ee72#
我确实解决了在服务器中对Datagrid的数据进行排序的问题,然后我使用sortComparator比较每个单元格的ID来缩短行。
排序顺序:[“描述”,“上升”],
排序比较器:(v1,v2,参数1,参数2)=〉{
返回 param1.id-param2.id;
}
an example
bvhaajcl3#
可以像这样定义渲染列。
渲染函数与date-fns一起使用,以便转换为我需要的格式
然后使用sortModel进行日期字段排序
这段代码接受时间戳,然后根据我们在函数中定义的日期时间格式,按日期和呈现值对它们进行排序。