我正在VB.NET中创建一个表单,用户可以在其中一个窗口中编辑7天用餐计划。如图所示,用户从装有相关食物的组合框中选择餐点。
我正在编写的代码应:
由于每顿饭都是不同的,而且每一天都是不同的,所以我必须对每个组合框分别进行编码,这很快将变得难以管理。
这是当前代码,用于获取周一的饭食并添加了组合框项目:
Private Sub getMealPlan()
Dim day As Integer
Dim mealPlan As MealPlan
mealPlan = New MealPlan
mealPlan.setMealPlanTableData()
mealPlan.setMealTableData()
Dim items As New List(Of String)()
Dim meals As MealPlan
meals = New MealPlan
meals.setMealsTable("Pre-workout/Snack")
With Me.monPreWorkout
.DataSource = meals.getTable
.ValueMember = meals.getTable.Columns(0).ToString
.DisplayMember = meals.getTable.Columns(1).ToString
End With
With Me.monSnack
.DataSource = meals.getTable
.ValueMember = meals.getTable.Columns(0).ToString
.DisplayMember = meals.getTable.Columns(1).ToString
End With
meals.setMealsTable("Breakfast")
With Me.monBreakfast
.DataSource = meals.getTable
.ValueMember = meals.getTable.Columns(0).ToString
.DisplayMember = meals.getTable.Columns(1).ToString
End With
meals.setMealsTable("Lunch/Dinner")
With Me.monLunch
.DataSource = meals.getTable
.ValueMember = meals.getTable.Columns(0).ToString
.DisplayMember = meals.getTable.Columns(1).ToString
End With
With Me.monDinner
.DataSource = meals.getTable
.ValueMember = meals.getTable.Columns(0).ToString
.DisplayMember = meals.getTable.Columns(1).ToString
End With
meals.setMealsTable("Drink")
With Me.monMornDrink
.DataSource = meals.getTable
.ValueMember = meals.getTable.Columns(0).ToString
.DisplayMember = meals.getTable.Columns(1).ToString
End With
With Me.monAfternoonDrink
.DataSource = meals.getTable
.ValueMember = meals.getTable.Columns(0).ToString
.DisplayMember = meals.getTable.Columns(1).ToString
End With
day = 0
Me.monPreWorkout.Text = mealPlan.getMealName(day, 0)
Me.monBreakfast.Text = mealPlan.getMealName(day, 1)
Me.monLunch.Text = mealPlan.getMealName(day, 2)
Me.monDinner.Text = mealPlan.getMealName(day, 3)
Me.monSnack.Text = mealPlan.getMealName(day, 4)
Me.monMornDrink.Text = mealPlan.getMealName(day, 5)
Me.monAfternoonDrink.Text = mealPlan.getMealName(day, 6)
End Sub
除了插入代码以反映用户在数据库中的更改外,我还必须在一周中的每一天复制这7天。这不是最好的方法。
我如何一次分配多个组合框参数或使该对象定向,以免出现混乱?
Public Class MealPlan
Inherits DatabaseTable
Public Shared meals As DatabaseTable
Public Sub setMealPlanTableData()
table = MainConnectionAccess.conndb.runAdapter("SELECT `preWorkout`, `breakfast`, `lunch`, `dinner`, `snack`, `drink1`, `drink2` FROM `tblMealPlan`")
setIndexToZero()
End Sub
Public Sub setMealTableData()
meals = New DatabaseTable
meals.setTableContents("SELECT `mealID`, `name` FROM `tblMeal`")
End Sub
Function getMealName(day, meal)
Dim mealID As String
Dim mealRow As Integer
mealID = getValue(day, meal)
setIndexToZero()
For Each row As DataRow In meals.table.Rows
If mealID = "0" Then
Return ""
ElseIf meals.getValue(currentRowIndex, 0) = mealID Then
mealRow = currentRowIndex
End If
addRowCount()
Next
Return meals.getValue(mealRow, 1)
End Function
Public Sub setMealsTable(category As String)
setTableContents("SELECT `mealID`, `name`, `category` FROM `tblMeal` WHERE category = '" + category + "'")
End Sub
Function getTable()
Return table
End Function
End Class
Public Class DatabaseTable
Public table As DataTable
Public currentRowIndex As Integer = 0
Public currentColumnIndex As Integer = 0
Public rowCountTotal As String
Public columnCountTotal As String
Public Sub setTableContents(mysqlstatement)
table = MainConnectionAccess.conndb.runAdapter(mysqlstatement)
setIndexToZero()
End Sub
Public Sub setIndexToZero()
currentColumnIndex = 0
currentRowIndex = 0
rowCountTotal = table.Rows.Count
columnCountTotal = table.Columns.Count
End Sub
Public Sub addColCount()
currentColumnIndex = currentColumnIndex + 1
End Sub
Public Sub addRowCount()
currentRowIndex = currentRowIndex + 1
End Sub
Public Sub initialise()
table = New DataTable
End Sub
Function getCurrentValue(row, column)
Dim actualRow As Integer
Dim actualCol As Integer
If IsNumeric(row) Then
'nothing
Else
actualRow = currentRowIndex
End If
If IsNumeric(column) Then
'nothing
Else
actualCol = currentColumnIndex
End If
Return table.Rows(actualRow).Item(actualCol).ToString()
End Function
Function getCurrentRow(column)
Return table.Rows(currentRowIndex).Item(column).ToString()
End Function
Function getCurrentColumn(row)
Return table.Rows(row).Item(currentColumnIndex).ToString()
End Function
Public Sub increaseQuantity(searchCol, searchValue, addCol, addValue)
Dim currentRowIndex As Integer = 0
For Each row As DataRow In table.Rows
If table.Rows(currentRowIndex).Item(searchCol) = Int(searchValue) Then
table.Rows(currentRowIndex).Item(addCol) = table.Rows(currentRowIndex).Item(addCol) + addValue
Exit Sub
End If
currentRowIndex += 1
Next
addNewItem(searchValue, addValue)
End Sub
Function getValue(row, column)
Return table.Rows(row).Item(column).ToString()
End Function
Public Sub printQuantities()
setIndexToZero()
For Each row As DataRow In table.Rows
Console.WriteLine(getValue(currentRowIndex, 0) + "," + getValue(currentRowIndex, 1))
addRowCount()
Next
End Sub
Public Sub addNewItem(name, quantity)
table.Rows.Add(name, quantity)
End Sub
Function getRowCount()
Return table.Rows.Count()
End Function
End Class