工作总结:按字母排序下拉框,点击首字母,跳转到对应位置

这篇博客介绍了如何实现按首字母排序的下拉框功能,涉及SQL改造、后台数据处理及前端样式和交互。通过转换数据库字段编码,对数据进行A-Z排序,然后在前端实现点击首字母跳转到对应位置,以及处理无对应值的首字母显示。
摘要由CSDN通过智能技术生成

应需求要求,最近要做一个类似于手机端首字母排序的下拉框。
这里写图片描述
整理了一下思路,大概分为一下几个步骤:

  • 由于数据库中的字段没有存首字母的信息,所以要将sql改造
  • 在后台处理相关数据,将取得的数据按英文字母排序
  • 前台写一个统一的js方法,以便不同位置统一调用

其实后台和sql语句没有什么难点,主要是前端的样式,滚动条滚动,点击跳转滚动条。
1)sql

SELECT 
ID AS id, BRAND AS value,
CONV(HEX(left(CONVERT(BRAND USING gbk),1)),16,10) AS initial
FROM xxx WHERE 1=1
GROUP BY BRAND
ORDER BY initial

由于数据库表中没有存该字段的首字母信息,所以在查询的时候将首字母的信息查询出来。brand这个字段包括首字母包含中文英文和数字,所以要转为一个有中文的编码。

  • CONVERT(BRAND USING gbk) :将要查询的字段(BRAND)转换为gbk编码
  • left(CONVERT(BRAND USING gbk),1) :返回字符串的前一个字符
  • HEX(x):返回x的十六进制编码
  • CONV(x,f1,f2):返回f1进制x的f2进制编码

查询的结果大概是这样的,将结果放入List<Map>
这里写图片描述

2)处理数据
数据展示是按照A-Z排序,所以想了一下后台传过的数据大概是

[
'A':[],
'B':[],
'C':[],
'D':[],
……
]

此时从数据库查询出来的数据的首字母信息是数字形式的编码形式,对这种编码进行处理,返回首字母大写
strChinese是数据库查询出的initial字段

 public static String  getPYIndexChar(int strChinese, boolean bUpCase) {
        int charGBK = strChinese;
        String result;
        if((charGBK & 255) <= 128){
            return String.valueOf((char)charGBK).toUpperCase();
        }
        if (charGBK >= 45217 && charGBK <= 45252)
            result = "A";
        else if (charGBK >= 45253 && charGBK <= 45760)
            result = "B";
        else if (charGBK >= 45761 && charGBK <= 46317)
            result = "C";
        else if (charGBK >= 46318 && charGBK <= 46825)
            result = "D";
        else if (charGBK >= 46826 && charGBK <= 47009)
            result = "E";
        else if (charGBK >= 47010 && charGBK <= 47296)
            result = "F";
        else if (charGBK >= 47297 && charGBK <= 47613)
            resu
要实现这个功能,你可以在点击下拉框中的按钮时,连接一个槽函数。在槽函数中,你可以使用QStackedWidget来管理多个界面,通过setCurrentIndex()方法切换到另一个界面。 首先,在你的主界面中,你需要创建一个QComboBox对象,添加下拉框中的按钮选项。然后,你需要创建一个QStackedWidget对象,并在其中添加你要跳转的多个界面。 接下来,你需要连接QComboBox的activated信号到一个槽函数。槽函数中,你可以使用QComboBox的currentIndex()方法获取当前选中的按钮的索引,然后通过QStackedWidget的setCurrentIndex()方法切换到对应的界面。 下面是一个示例代码: ```python import sys from PyQt5.QtWidgets import QApplication, QComboBox, QLabel, QWidget, QPushButton, QVBoxLayout, QStackedWidget class MainWindow(QWidget): def __init__(self): super().__init__() # 创建下拉框和按钮 self.comboBox = QComboBox() self.comboBox.addItems(['界面1', '界面2']) self.pushButton = QPushButton('跳转') # 创建多个界面 self.page1 = QWidget() self.label1 = QLabel('这是界面1') self.page2 = QWidget() self.label2 = QLabel('这是界面2') # 创建堆叠窗口 self.stackedWidget = QStackedWidget(self) self.stackedWidget.addWidget(self.page1) self.stackedWidget.addWidget(self.page2) # 布局 layout = QVBoxLayout(self) layout.addWidget(self.comboBox) layout.addWidget(self.pushButton) layout.addWidget(self.stackedWidget) # 连接信号和槽函数 self.comboBox.activated.connect(self.changePage) self.pushButton.clicked.connect(self.changePage) def changePage(self): index = self.comboBox.currentIndex() self.stackedWidget.setCurrentIndex(index) if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) ``` 在这个示例中,当你选择下拉框中的按钮时,或者点击跳转按钮时,都会切换到对应的界面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值