You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:15:03