java 点击表头排序_Java——点击上下箭头实现商品排序

在项目中有时候难免会遇上这种商品排序的需求,当然,别的排序也是一样的原理,如下图

3efe228950ca3ac960320696d7723917.png现在给我的要求是做到点击↑就把商品网上移动,点击↓就把商品往下移动,其实原理就是互换位置了,每个商品对应一个sortNum(排序码),展示这个列表的时候是在SQL语句中根据sortNum进行排序,正序或者倒序,思路就是点↑的时候把上下的排序码互换位置,点击↓的原理也是如此

如果仅仅是想实现这样最简单的上下排序那么非常的容易,按照上面这个思路进行操作就行,但是我这个还有别的要求,还需要考虑到删除商品的情况

301f61bcae914e5bd95e290c37aa768a.png删除商品会让那个商品对应的sortNum也变成空,这样会在后期的排序中出现问题,所以在你的代码中得做些判断,即使某个排序码后面一位不见了,比如第一个商品排序码是1,后面的商品是2,这个时候如果删除了第二个商品,那么第一个商品后面就变成3了,所以需要加个递归的查询,他后面如果是空,在后面还是空,就需要递归查询直到不为空的时候!

还有注意的地方是第一个商品肯定不能继续网上移动了,最后一个肯定也不能继续往下!

我的代码如下

@ResponseBody

@RequestMapping("/sortUp")

public AjaxResult sortUp(Integer id) {//获取到点击排序的那个商品id

Goods goods = service.findById(id);//根据id查询到对应的商品

Integer sortNum = goods.getSortNum();//获取对应的排序码

Integer integer = Md.selectOne(FIND_SORTFIRST, null, Integer.class);//==select sortNum from t_goods where deleteKey=1 and sortNum is not null order by sortNum

if(sortNum<=integer){

return null;

}

if (sortNum > 1) {

Integer upNum = 1;

ListgoodsList = this.getList(sortNum-1, false);

for (Goods g : goodsList) {

upNum = g.getSortNum();

g.setSortNum(goods.getSortNum() );

service.update(g);

}

goods.setSortNum(upNum);

boolean flag = service.update(goods);

if (flag) {

return success("操作成功");

} else {

return error("操作失败");

}

} else {

return error("此商品不能往上移动!");

}

}

@ResponseBody

@RequestMapping("/sortDown")

public AjaxResult sortDown(Integer id) {//获取到点击排序的那个商品id

Goods goods = service.findById(id);

Integer integer = Md.selectOne(FIND_SORT, null, Integer.class);//==select sortNum from t_goods where deleteKey=1 and sortNum is not null order by sortNum desc

Integer sortNum = goods.getSortNum();

if (sortNum < 0) {

return null;

}

if(sortNum>=integer){

return null;

}

Integer dowmSortNum = 1;

ListgoodsList = this.getList(sortNum + 1, true);

for (Goods g : goodsList) {

dowmSortNum = g.getSortNum();

g.setSortNum(goods.getSortNum());

service.update(g);

}

goods.setSortNum(dowmSortNum);

boolean flag = service.update(goods);

if (flag) {

return success("操作成功");

} else {

return error("操作失败");

}

}

public ListgetList(Integer dowmSortNum, boolean f) {

ListgoodsList = service.findBy("sortNum=#{sortNum} and deleteKey=1", getData("sortNum", dowmSortNum));//deletKey=1代表有效的数据,sortNum是排序的号码

if (dowmSortNum == 0) {

return null;

}

if (goodsList == null || goodsList.size() == 0) {

if (f) {

dowmSortNum = dowmSortNum + 1;

} else {

dowmSortNum = dowmSortNum - 1;

}

return this.getList(dowmSortNum, f);

}

return goodsList;

}

具体的还是要根据实际情况来判断!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过以下步骤在QT中实现QTableWidget的点击表头排序: 1. 在QT Designer中将QTableWidget添加到窗口中。 2. 在代码中为QTableWidget设置表头,并设置表头的单击信号连接到槽函数中。 ```c++ QTableWidget *tableWidget = new QTableWidget(this); tableWidget->setColumnCount(3); tableWidget->setHorizontalHeaderLabels(QStringList() << "Name" << "Age" << "City"); connect(tableWidget->horizontalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(sortTable(int))); ``` 3. 编写槽函数sortTable(),该函数根据点击表头排序QTableWidget中的数据。 ```c++ void MainWindow::sortTable(int column) { tableWidget->sortByColumn(column); } ``` 4. 运行程序,单击表头即可按照点击的列排序。 完整的代码如下: ```c++ #include <QtWidgets/QMainWindow> #include <QtWidgets/QTableWidget> #include <QtWidgets/QHeaderView> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) { QTableWidget *tableWidget = new QTableWidget(this); tableWidget->setColumnCount(3); tableWidget->setHorizontalHeaderLabels(QStringList() << "Name" << "Age" << "City"); connect(tableWidget->horizontalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(sortTable(int))); QStringList names = {"Alice", "Bob", "Charlie", "David", "Eva"}; QStringList ages = {"25", "30", "20", "35", "28"}; QStringList cities = {"New York", "London", "Paris", "Tokyo", "Sydney"}; for (int i = 0; i < 5; i++) { QTableWidgetItem *nameItem = new QTableWidgetItem(names[i]); QTableWidgetItem *ageItem = new QTableWidgetItem(ages[i]); QTableWidgetItem *cityItem = new QTableWidgetItem(cities[i]); tableWidget->setItem(i, 0, nameItem); tableWidget->setItem(i, 1, ageItem); tableWidget->setItem(i, 2, cityItem); } setCentralWidget(tableWidget); } private slots: void sortTable(int column) { tableWidget->sortByColumn(column); } private: QTableWidget *tableWidget; }; int main(int argc, char *argv[]) { QApplication app(argc, argv); MainWindow mainWindow; mainWindow.show(); return app.exec(); } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值