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

VB.NET中如何避免重复编写DataTable填充代码?

解决方案:提取重复逻辑为独立方法

将两个方法中重复的数据库查询、DataTable填充代码抽成一个独立的私有方法,让业务方法直接调用该方法即可消除重复代码,同时让每个方法职责更清晰。

1. 提取基础数据获取方法

创建一个专门负责从数据库获取基础DataTable的方法,接收PNM参数并返回填充好的数据表:

Private Function GetBaseDataTable(pnmValue As Object) As DataTable
    Dim dt As New DataTable()
    Dim query As String = "SELECT NOD,ITM,CIA,DPR,QTY FROM RSD WHERE QTY > 0 AND PNM=@PNM"
    
    Using con As New OleDbConnection(GetConnectionString())
        Using cmd As New OleDbCommand(query, con)
            cmd.Parameters.AddWithValue("@PNM", pnmValue)
            Using da As New OleDbDataAdapter(cmd)
                da.Fill(dt)
            End Using
        End Using
    End Using
    
    Return dt
End Function

2. 修改fillDataGridView1方法

调用上面的方法获取基础数据,再专注完成DataGridView绑定的业务逻辑:

Public Sub fillDataGridView1()
    dt = GetBaseDataTable(ComboBox1.SelectedValue)
    
    ' 添加计算列
    Dim totalColumn As New DataColumn()
    totalColumn.DataType = GetType(Double)
    totalColumn.ColumnName = "Total"
    totalColumn.Expression = "[CIA]*[QTY]*(1-[DPR]/100)"
    dt.Columns.Add(totalColumn)
    
    Me.grid.DataSource = dt
    Me.grid.Refresh()
End Sub

3. 修改GenerateReport方法

同样调用基础数据方法,再专注完成报表相关的处理:

Private Sub GenerateReport()
    KtReport1.Clear()
    
    Dim baseDt As DataTable = GetBaseDataTable(ComboBox1.SelectedValue)
    
    ' 克隆数据表并修改列类型
    Dim dtCloned As DataTable = baseDt.Clone()
    dtCloned.Columns("CIA").DataType = GetType(String)
    For Each row As DataRow In baseDt.Rows
        dtCloned.ImportRow(row)
    Next row
    
    KtReport1.AddDataTable(dtCloned)
End Sub

说明

  • 这种重构方式消除了代码重复,避免后续修改查询逻辑时需要在两个地方同步修改。
  • 每个方法的职责更单一:GetBaseDataTable只负责数据获取,fillDataGridView1只负责DataGridView的绑定,GenerateReport只负责报表生成,便于后续维护和扩展。

内容的提问来源于stack exchange,提问作者roy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:15:45