VB.NET中如何通过组合框选中的月份筛选事务表数据
解决方案
1. 组合框年月选项加载改造
原代码会全量读取事务表的完整日期,存在重复项,直接修改SQL语句即可生成符合要求的去重年月选项:
Try con.Open() ' SQL直接生成格式化后的年月,自动去重并按时间倒序排列 cmd = New MySqlCommand("SELECT DISTINCT DATE_FORMAT(transaction_date, '%Y年%m月') as year_month FROM tbtransaction ORDER BY transaction_date DESC", con) dr = cmd.ExecuteReader cmbdate.Items.Clear() ' 加载前清空原有选项避免重复 While dr.Read cmbdate.Items.Add(dr.GetString("year_month")) End While con.Close() Catch ex As Exception con.Close() MsgBox(ex.Message, vbCritical) End Try
2. 选中月份后筛选事务数据
给组合框添加SelectedIndexChanged事件,选中选项后查询对应月份的全部事务数据,绑定到你的表展示控件即可:
Private Sub cmbdate_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbdate.SelectedIndexChanged ' 未选中选项直接退出 If cmbdate.SelectedItem Is Nothing Then Exit Sub Dim selectMonth = cmbdate.SelectedItem.ToString() Dim transactionDt As New DataTable() Try con.Open() ' 参数化查询匹配对应月份的所有事务,避免SQL注入和格式匹配错误 cmd = New MySqlCommand("SELECT * FROM tbtransaction WHERE DATE_FORMAT(transaction_date, '%Y年%m月') = @selectMonth", con) cmd.Parameters.AddWithValue("@selectMonth", selectMonth) Dim da As New MySqlDataAdapter(cmd) da.Fill(transactionDt) con.Close() ' 替换为你实际的事务表展示控件绑定逻辑即可 ' 示例:DataGridView1.DataSource = transactionDt Catch ex As Exception con.Close() MsgBox(ex.Message, vbCritical) End Try End Sub
注意事项
- 请确保
transaction_date字段为MySQL的date/datetime类型,如果你用字符串存储日期,需要先用STR_TO_DATE函数将字段转为日期类型再做格式化处理。 - 建议始终使用参数化查询做条件匹配,不要直接拼接SQL字符串。
内容的提问来源于stack exchange,提问作者Sekeyrw
相关产品推荐
相关产品推荐

