【问题标题】:Check-boxes and Arrays复选框和数组
【发布时间】:2012-06-20 04:22:33
【问题描述】:
<tr>
<td width=60%><asp:CheckBox ID="chk0" runat="server" /> ...</td>
<td width=40%><asp:CheckBox ID="chk1" runat="server" /> ...</td>
</tr>
...
...
...

我有这样的价值观:

var lst = "18,6,0,7,0,4,0,1,5,0,2"

如果有 18 则检查 chk18 等等... 0 只是意味着没有检查。有没有一种理想的编码方式? whileloop 是否理想?

这些值来自数据库表,所有数据都采用该格式。

【问题讨论】:

  • 0 是什么意思?您还有 chk0... 并且 0 在您的列表中多次出现...
  • 这有点令人困惑。您是说第一个数字 (18) 表示应检查 id 为“chk18”的复选框,但 0 表示未检查任何内容? id 为“chk0”的复选框呢

标签: asp.net html vb.net


【解决方案1】:

请注意,这不适用于您的控件“chk0”,如果您没有相关复选框(例如 = 18 在您的数据中,但您没有控件 chk18),则会崩溃。

    Dim strData As String = "18,6,0,7,0,4,0,1,5,0,2"

    Dim lstIDs As List(Of String) = strData.Split(",").ToList()

    For Each strID As Integer In lstIDs

        If CInt(strID) > 0 Then

            CType(Page.FindControl("chk" & strID), CheckBox).Checked = True

        End If

    Next

【讨论】:

    【解决方案2】:

    我不太确定“0”的值是什么意思,因为你有一个 id 为 0 的控件。无论如何,我有一段时间没有做过 ASP.NET WebForms,但这会让你很好在路上:

    var lst = "18,6,0,7,0,4,0,1,5,0,2"
    var checkboxIdsToBeSelected = lst.Split(',');
    
    foreach (var id in checkboxIdsToBeSelected) {
        foreach (Control ctrl in Page.Controls) {
            if (ctrl is CheckBox && cntrl.ID == "chk" + id) {
              ((CheckBox)(ctrl)).Checked = true;
            }
        }
    }
    

    【讨论】:

    • 虽然他使用var而不是Dim,但他将其标记为VB.NET而不是C#。
    • 如果需要,应该很容易转换。
    猜你喜欢
    • 2020-08-12
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 2011-09-28
    相关资源
    最近更新 更多