gpt4 book ai didi

asp.net - 如何改进具有多个 case 语句的页面设计

转载 作者:行者123 更新时间:2023-12-02 18:41:04 27 4
gpt4 key购买 nike

我的页面包含:GridView1、GridView2、Button1、Button2、DropDownList1我将 Gridviews 绑定(bind)到下拉列表中选择的表,如下所示:

Dim results as DataTable
Select Case ddl1.SelectedValue
Case 0
results = dtZero
Case 1
results = dtOne
Case 2
results = dtTwo
Case 3
results = dtThree
End Select
GridView1.DataSource = results
GridView1.DataBind()

然后我有两个按钮,代码如下:

Protected Sub btn1_Click(sender As Object, e As EventArgs) Handles btn2.Click
Select Case ddl1.SelectedValue
Case 0
RunZero()
Case 1
RunOne()
Case 2
RunTwo()
Case 3
RunThree()
End Select
End Sub

还有

Protected Sub btn2_Click(sender As Object, e As EventArgs) Handles btn2.Click
Select Case ddl1.SelectedValue
Case 0
RemoveZero()
Case 1
RemoveOne()
Case 2
RemoveTwo()
Case 3
RemoveThree()
End Select
End Sub

对我来说,这看起来像是很多开销。如何改进设计并仅指定我正在处理下拉列表中的以下记录,而不每次都指定 Case 条件?我应该改变我的设计还是保持原样?

更新:RunZeroRunOneRunTwoRemoveZeroRemoveOneRemoveTwo, RemoveThree - 执行六个不同的存储过程。

最佳答案

解决这个问题很有趣。谢谢。

听起来您应该使用操作。

首先创建一个类来跟踪下拉列表代表的所有“操作”...

编辑:使用操作来表明您可以根据需要为函数使用参数。

Class OpMode
Public DropDownKey As String
Public RunFunction As Action(Of Int32) 'This one will support a parameter'
Public RemoveFunction As Action
Public dt As Data.DataTable

Sub New(DropDownKey As String, RunFunction As Action(Of Int32), RemoveFunction As Action, dt As Data.DataTable)
Me.DropDownKey = DropDownKey
Me.RunFunction = RunFunction
Me.RemoveFunction = RemoveFunction
Me.dt = dt
End Sub
End Class

您应该已经拥有运行过程的方法。

编辑:在此示例中,我允许为“运行”过程提供一个参数...

Private Sub RunOne(MyVariable As Int32)
Response.Write("RunOne")
End Sub

Private Sub RunTwo(MyVariable As Int32)
Response.Write("RunTwo")
End Sub

Private Sub RemoveOne()
Response.Write("RemoveOne")
End Sub

Private Sub RemoveTwo()
Response.Write("RemoveTwo")
End Sub

我假设你在某个地方有这些数据表......

Private dtOne As New Data.DataTable
Private dtTwo As New Data.DataTable

创建一个只读属性来保存您要使用的所有 OpMode。重新创建很容易,因此无需缓存它。

Private ReadOnly Property OpModes As List(Of OpMode)
Get
Dim _OpModes As New List(Of OpMode)

_OpModes.Add(New OpMode("1", AddressOf RunOne, AddressOf RemoveOne, dtOne))
_OpModes.Add(New OpMode("2", AddressOf RunTwo, AddressOf RemoveTwo, dtTwo))

Return _OpModes
End Get
End Property

创建一个函数,用于在操作模式列表中搜索与下拉列表匹配的操作模式...

Private Function GetOpByDropDownKey(DropDownKey As String) As OpMode
Return (From x In OpModes Where x.DropDownKey = DropDownKey).First
End Function

创建一个适用于两个按钮的单击事件并调用适当的方法...

编辑:在此示例中,RunFunction 有一个参数,但 RemoveFunction 没有。

Private Sub btn_Click(sender As Object, e As System.EventArgs) Handles btn1.Click, btn2.Click
With GetOpByDropDownKey(dd1.SelectedValue)
If sender Is btn1 Then
.RunFunction(12345)
Else
.RemoveFunction()
End If
End With
End Sub

现在您可以通过编程方式绑定(bind)正确的数据表...

GridView1.DataSource = GetOpByDropDownKey(dd1.SelectedValue).dt
GridView1.DataBind()

一旦你开始工作,维护起来应该会容易得多。您可能会意外忘记在 case 语句中包含某个项目,因为所有该定义都在只读属性中定义一次。

编辑:(删除了有关代表的注释。您只需要操作即可。)

希望这对您有帮助。

关于asp.net - 如何改进具有多个 case 语句的页面设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7097651/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com