如何按InvoiceNo排序将数据表记录检索至DataGridView?
按InvoiceNo排序并将数据加载到DataGridView的正确实现方案
我来帮你搞定这个问题,咱们一步步修正和完善你的代码,同时解决潜在的风险:
先说说你现有代码的几个问题
- 你的SQL查询没有添加排序逻辑,所以不会按
InvoiceNo排序 - 直接把变量
No拼接到SQL语句里存在SQL注入风险,这在生产环境是绝对要避免的 - DataGridView的显示写法
DataGridView2.Show.item是错误的,WinForms里正确的绑定方式是设置DataSource属性
正确的实现方案(以VB.NET为例)
1. 使用参数化查询+排序逻辑
首先修改SQL语句,添加ORDER BY InvoiceNo实现排序,同时用参数化查询替代字符串拼接,避免注入风险:
2. 正确绑定数据到DataGridView
直接将查询得到的DataTable赋值给DataGridView的DataSource,控件会自动生成列并填充数据。
下面是完整的可运行代码示例:
' 替换成你的数据库连接字符串 Dim connectionString As String = "Server=你的服务器;Database=你的数据库;Uid=用户名;Pwd=密码;" ' 1. 构造带排序的参数化SQL Dim sqlQuery As String = "SELECT * FROM tblInvoicedeteils WHERE InvoiceNo = @InvoiceNo ORDER BY InvoiceNo" ' 2. 使用Using块自动释放资源(最佳实践) Using conn As New SqlConnection(connectionString) Using cmd As New SqlCommand(sqlQuery, conn) ' 添加参数,避免SQL注入 cmd.Parameters.AddWithValue("@InvoiceNo", No) conn.Open() ' 填充DataTable Dim dataAdapter As New SqlDataAdapter(cmd) Dim resultTable As New DataTable() dataAdapter.Fill(resultTable) ' 3. 绑定到DataGridView If resultTable.Rows.Count > 0 Then DataGridView2.DataSource = resultTable ' 可选:设置列自动填充宽度,优化显示效果 DataGridView2.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill Else ' 无数据时清空控件或提示 DataGridView2.DataSource = Nothing MessageBox.Show("未找到匹配InvoiceNo的记录") End If End Using End Using
如果你用的是自定义的DbSelect方法
如果你的DbSelect是封装好的数据访问方法,那需要修改它支持参数化查询,然后这样调用:
' 构造带排序的SQL Dim sql As String = "SELECT * FROM tblInvoicedeteils WHERE InvoiceNo = @InvoiceNo ORDER BY InvoiceNo" ' 准备参数(假设DbSelect支持接收参数集合) Dim parameters As New Dictionary(Of String, Object) From { {"@InvoiceNo", No} } ' 调用自定义方法查询 Dim LoadRec As DataTable = DbSelect(sql, parameters) ' 绑定数据 If LoadRec.Rows.Count > 0 Then DataGridView2.DataSource = LoadRec DataGridView2.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill Else DataGridView2.DataSource = Nothing End If
额外说明
- 如果需要按
InvoiceNo降序排列,把SQL里的ORDER BY InvoiceNo改成ORDER BY InvoiceNo DESC - 永远不要直接拼接用户输入到SQL语句里,参数化查询是防范SQL注入的核心手段
- 设置
AutoSizeColumnsMode是为了让列宽自动适配内容,提升用户体验
内容的提问来源于stack exchange,提问作者mhmoud alfhel
相关产品推荐
相关产品推荐

