【问题标题】:how to save multiple checkbox values in one while or for loop in vb.net如何在一个while或vb.net中的for循环中保存多个复选框值
【发布时间】:2011-01-10 15:49:59
【问题描述】:

我有 50 个用于 50 个美国州的复选框。用户可以选择全部 50 个或只选择 1 个(所以基本上他想要的任何数字)。根据他的选择,我想在 sql server 2008 中插入或更新表。例如-

颜色 = 蓝色和 chk1=检查,chk2= 检查和 chk3 = 检查(chk = 复选框)。现在用户想要再添加 10 个状态或删除这 3 个并再添加 5 个。所以你基本上明白了。数据库中的表如下所示 - ID 颜色 State_id 有一个名为 states 的表,因此 stateid 应来自那里。那么如何在 vb.net 中进行循环插入或更新?

【问题讨论】:

  • 这是 Windows 窗体、ASP.NET 还是其他?
  • 带有 VB.net 代码的 asP.net
  • 这个问题怎么和其他用户问的一模一样? - stackoverflow.com/questions/2158693
  • @Bill 你怎么会因为在双方都发布相同的 cmets 而获得支持 :) 这不公平。

标签: database vb.net checkbox


【解决方案1】:

我会在 .net 中使用按位运算和 long 变量(与标志的枚举混合)

数据库中的一个字段,并且更容易使用用户选择的内容

小样本

Enum state As Long '64 enum maxium since long = 64 bits

ALABAMA = 1
ALASKA = 2
NEVADA = 4
ARIZONA = 8
ARKANSAS = 16
CALIFORNIA = 32
COLORADO = 64
CONNECTICUT = 128
DELAWARE = 256
'etc etc etc

End Enum

Module Module1

Sub Main()
    Dim userselect As state = 0

    Console.WriteLine("your checked box state")
    Console.WriteLine("in this case im using the order of the enum for selecting")
    Dim checkbox = New Boolean() {True, False, False, True, False, False, True, False, False}

    For i = 0 To checkbox.Length - 1
        userselect = CType(userselect + If(checkbox(i), (2 ^ (i + 1)), 0), state)
    Next

    For Each s As state In [Enum].GetValues(GetType(state))
        If (userselect And s) > 0 Then
            Console.WriteLine("selected " & s.ToString)
        End If
    Next

    Console.WriteLine("Value of userselect is " & userselect.ToString)

    Console.ReadKey()

End Sub

End Module

OUTPUT:

selected NEVADA
selected ARIZONA
selected COLORADO
Value of userselect is 76

【讨论】:

  • 你能解释更多或提供一个我可以阅读的链接吗?
  • 给我几分钟来创建一个小例子
【解决方案2】:

我会使用数据源和复选框列表。您已经在数据表中拥有状态,使用来自 SqlDataSource(或您自己选择的数据表)的数据绑定选择填充复选框列表。然后,当您单击按钮时,只需遍历以下循环:

Dim dt as New myTypedDataTable  ' constructed from datasource

Dim color as String = "Blue"    ' Filled however you set color

For Each item As ListItem In Me.CheckBoxList1.Items
    If item.Selected Then
        Dim row as myTypedDataTableRow = dt.NewmyTypedDataTableRow
        row.Color = color
        row.State_id = item.Value
        dt.Rows.Add(row)
    End If
Next

一旦数据表填满了相关行,您可以使用 SqlDataSource 执行插入操作或自动执行插入操作。有几种方法可以完成它,但这可能是在给定您描述的数据结构的情况下迭代项目的最简单方法。

【讨论】:

    【解决方案3】:

    在这种情况下,我有时会采取简单的方法,删除数据库中存储的所有用户项,然后只进行插入。

    如果您有例如插入日期,这可能是一个问题。在这种情况下,您需要列出用户选择的选项。在新列表中循环,如果在旧列表中找不到该项目,则它是一个插入。在旧列表中循环,如果在新列表中找不到该项目,则删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多