VB.NET中如何对DataGridView的ProductCode、ColorCode、Size列排序
实现DataGridView多列排序(含Size列自定义顺序)
需要对DataGridView中的ProductCode、ColorCode、Size列进行排序,其中Size列需遵循以下自定义顺序:
| Size | 排序序号 |
|---|---|
| XS | 1 |
| S | 2 |
| M | 3 |
| L | 4 |
| XL | 5 |
| XXL | 6 |
| 2L | 7 |
| 3L | 8 |
| 4L | 9 |
| 5L | 10 |
| 6L | 11 |
解决方案步骤
1. 建立Size与排序序号的映射
创建映射关系,快速将Size值转换为对应的排序优先级。
2. 添加隐藏的排序辅助列
给DataTable新增一个整数类型的计算列,用于存储Size对应的排序序号,后续排序将依赖该列。
3. 通过DataView实现多列排序
利用DataView的Sort属性指定排序规则:先按ProductCode降序、再按ColorCode升序、最后按Size对应的排序序号升序。
4. 隐藏辅助列
将辅助列设置为不可见,避免干扰界面展示。
修改后的完整代码
Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' 定义Size的自定义排序映射 Dim sizeOrderMap As New Dictionary(Of String, Integer) From { {"XS", 1}, {"S", 2}, {"M", 3}, {"L", 4}, {"XL", 5}, {"XXL", 6}, {"2L", 7}, {"3L", 8}, {"4L", 9}, {"5L", 10}, {"6L", 11} } Dim table1 As New DataTable("Players") table1.Columns.Add(New DataColumn("ProductCode", GetType(String))) table1.Columns.Add(New DataColumn("Remark", GetType(String))) table1.Columns.Add(New DataColumn("ColorCode", GetType(String))) table1.Columns.Add(New DataColumn("Size", GetType(String))) table1.Columns.Add(New DataColumn("Qty", GetType(Integer))) ' 添加Size排序辅助列,通过IIF表达式生成对应序号 Dim sizeSortColumn As New DataColumn("SizeSortOrder", GetType(Integer)) sizeSortColumn.Expression = $"IIF(Size='XS',1,IIF(Size='S',2,IIF(Size='M',3,IIF(Size='L',4,IIF(Size='XL',5,IIF(Size='XXL',6,IIF(Size='2L',7,IIF(Size='3L',8,IIF(Size='4L',9,IIF(Size='5L',10,IIF(Size='6L',11,0)))))))))" table1.Columns.Add(sizeSortColumn) ' 填充数据 table1.Rows.Add("TEST 3000", "TEST", "BHTF10", "5L", 25) table1.Rows.Add("TEST 2000", "TEST", "BHTF15", "S", 55) table1.Rows.Add("TEST 3000", "TEST", "BHTF10", "M", 65) table1.Rows.Add("TEST 1000", "TEST", "BHTF25", "6L", 10) table1.Rows.Add("TEST 3000", "TEST", "BHTF10", "S", 12) ' 通过DataView设置排序规则 Dim dataView As New DataView(table1) dataView.Sort = "ProductCode DESC, ColorCode ASC, SizeSortOrder ASC" DataGridView1.DataSource = dataView ' 隐藏辅助列 DataGridView1.Columns("SizeSortOrder").Visible = False End Sub
代码说明
- 映射关系:字典清晰定义了每个Size对应的排序优先级,后续可按需调整。
- 计算列:嵌套
IIF函数自动为每行生成Size对应的排序序号,无需手动赋值。 - 排序规则:
ProductCode降序匹配期望结果的展示顺序,结合ColorCode和辅助列的排序,完全满足需求。 - 隐藏列:辅助列仅用于排序逻辑,不显示在界面上。
验证结果
运行代码后,DataGridView将呈现与期望一致的排序结果:
| ProductCode | Remark | ColorCode | Size | Qty |
|---|---|---|---|---|
| TEST 3000 | TEST | BHTF10 | S | 12 |
| TEST 3000 | TEST | BHTF10 | M | 65 |
| TEST 3000 | TEST | BHTF10 | 5L | 25 |
| TEST 2000 | TEST | BHTF15 | S | 55 |
| TEST 1000 | TEST | BHTF25 | 6L | 10 |
内容的提问来源于stack exchange,提问作者roy
相关产品推荐
相关产品推荐

