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
相关产品推荐
相关产品推荐

