- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的页面包含: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
条件?我应该改变我的设计还是保持原样?
更新:RunZero
、RunOne
、RunTwo
、RemoveZero
、RemoveOne
、RemoveTwo
, 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/
我经常在 ATS 中看到使用 case、case+ 或 case- 形成的 case 表达式。有什么区别? 最佳答案 如果表达式不详尽,使用 case 会发出警告,case+ 会产生错误,而 case
我有一个导入时全部大写的表,我想将其转换为正确的大小写。你们用什么脚本来完成这个? 最佳答案 这个函数: “正确大小写”由空格分隔的所有“大写”单词 保留“小写单词” 即使对于非英语字母也能正常工作
#include int main() { switch(2) { case 1: if(1)
我已经四处寻找了一段时间,如果我使用的术语不当,请原谅我... 代码的目标是在输入为 0 时更新 Aout1 和 Aout0,输出对应于 7 段显示,但出现以下错误: “错误 (10170):Four
我正在尝试按照 PostgreSQL 手册中的说明进行操作。 PostgreSQL: Documentation: 9.1: Control Structures 我的 PostgreSQL 服务器是
我有一个状态机,其中有几个非常相似的状态。我可以为每个状态编写它,如下例所示: module CHECK_FSM ( GO, DONE, CLK, RESETN ); input GO;
如何使用或创建案例? 就像是: string str; case (str) "abc" || "dfg": begin //some code end "yfg":
这个问题已经有答案了: Are double and single quotes interchangeable in JavaScript? (23 个回答) 已关闭 9 年前。 我正在学习Java
汽车 Make | Model | Year | Color Honda | Accord | 12 | Red Lexus | IS | 14 |
如何使用当前 case 语句的值跳转到 switch-case 条件下的另一个 case 语句? 是否可以使用 switch case 来实现这种事情,或者是否有其他实现方式? 有可能实现吗?如果没有
我理解下面的代码。 var day = 2; switch (day) { case 1: document.write("Monday"); break;
这是有效的。 object FilesToDFDS { case class Student(id: Int, name: String, dept:String) def main(
我对 VHDL 还是个新手。我需要在 CASE 语句中为多个信号赋值,如下所示: CASE input24 IS WHEN "00" THEN output0
我有这个 case 语句,它给出了一个错误“变量 constant1 未使用”。它似乎忽略了变量并返回了第一行,因此变量显然没有范围。如果我用数字 1 替换常量,那么它就可以工作。在 Elixir 中
在 MySQL 中,是否可以在 SELECT 子句中有两个 CASE 语句,其中第二个 CASE 语句依赖于第一个 CASE 语句? 例如,考虑以下查询: SELECT CASE WHEN `user
我正在尝试一个挑战,我需要获得一个随机数,并在没有重复的情况下打印数字内的数字总和:例如,123 将打印 6 ( 1 + 2 + 3 ),而 32111 将做同样的事情(因为我们没有在我们的总和中添加
当有人试图更新当前未存储在我的散列中的值时,我想立即返回 when 'add' 而无需重新启动整个 case声明,因为我已经知道他们想要添加并且不想再次提示他们。 有没有一种方法可以在不重新启动整个案
老 C 程序员可以在 Swift 方面得到一些帮助。 我不太了解 if-case 语法。例如: if case 20...30 = age { print ("in range.") } cas
老 C 程序员可以在 Swift 方面得到一些帮助。 我不太了解 if-case 语法。例如: if case 20...30 = age { print ("in range.") } cas
我有一个 ArrayList,其中包含以下字符串:[name, age, gender, salary] . 有没有办法可以将 ArrayList 中的值用作 case 表达式? 显而易见的答案是否定
我是一名优秀的程序员,十分优秀!