1

asp.net(vs 2005 / .net 2.0)のチェックボックスリストから選択した項目を連結文字列として渡そうとしています。

現在、私の.aspxは

        <asp:CheckBoxList id="checkbox1" AutoPostBack="False" AppendDataBoundItems="true" CellPadding="5" CellSpacing="5" RepeatColumns="1" RepeatDirection="Vertical" RepeatLayout="Flow" TextAlign="Right" runat="server">
            <asp:ListItem Value="1">Carrots</asp:ListItem>
            <asp:ListItem Value="2">Lettuce</asp:ListItem>
            <asp:ListItem Value="3">Olives</asp:ListItem>
            <asp:ListItem Value="4">Onions</asp:ListItem>
            <asp:ListItem Value="5">Tomato</asp:ListItem>
            <asp:ListItem Value="6">Pickles</asp:ListItem>
        </asp:CheckBoxList>

そして、.aspx.vbは(送信用の保護されたサブ内にあります)

    For Each li As ListItem In checkbox1.Items
        If li.Selected = True Then
            checkbox1.Text = checkbox1.Text + "," + li.Text
        End If
    Next

これは、経由でデータベースに書き込まれます

checkbox1.Text = dv(0)("Salad").ToString()

選択して保存すると、現在エラーが発生しています

'/'アプリケーションのサーバーエラー。

'checkbox1'にはSelectedValueがありますが、これはアイテムのリストに存在しないため無効です。

パラメータ名:値

選択したチェックボックス項目を連結する方法についての考え

たとえば、ニンジン、レタス、トマトを選択した場合。

checkbox1 = 1,2,5
4

2 に答える 2

4

私はあなたがあなたが返していると説明するようにあなたが変数に割り当てているとは思わない。

string list = "";
For Each li As ListItem In chkQ4.Items
        If li.Selected = True Then
            list = list + "," + li.Text
        End If
    Next

上記の行を書く方法です。

linqを使用するC#では、次のように記述します

var list =  checkbox1.Items
.Cast<ListItem>()
.Where(item => item.Selected == true)
.Select(item => item.Value);
var result = string.Join(",",list);

VBでは次のように思います

Dim list = checkbox1.Items.Cast(Of ListItem)().Where(Function(item) item.Selected = True).[Select](Function(item) item.Value)
Dim result = String.Join(",", list.ToArray())
于 2012-08-01T17:59:06.153 に答える
0

これはちょっとした例です

マークアップ:

<asp:CheckBoxList ID="CheckBoxList1" runat="server">
<asp:ListItem Value="1">Carrots</asp:ListItem>
<asp:ListItem Value="2">Apples</asp:ListItem>
<asp:ListItem Value="3">Lettuce</asp:ListItem>        
</asp:CheckBoxList>
<br />
<asp:Literal ID="Literal1" runat="server"></asp:Literal><br />
<br />
<asp:Button ID="Button1" runat="server" Text="Concatenate" /><br />
<asp:Button ID="Button2" runat="server" Text="Save" />

コードビハインド:

 Private Sub SaveItems(ByVal strItems As String)

    Dim cn As New SqlConnection("user id=sa;password=abcd;database=BD_Test;server=SERVNAME")
    Dim cmd As New SqlCommand("Insert into CheckItems values (@ItemId)", cn)
    Dim cmdPar As New SqlParameter("@ItemId", SqlDbType.Char, 1)

    If strItems.Split(",").Length > 0 Then

        cmd.Parameters.Add(cmdPar)
        Using cn
            cn.Open()
            Using cmd 
            ''Split the existing selected values, store it in an array 
            ''and iterate to get each element of it to save it in the DB
            For Each strItem As String In strItems.Split(",")                    
                    cmd.Parameters("@ItemId").Value = strItem
                    cmd.ExecuteNonQuery()                    
            Next
            End Using  
            Me.Literal1.Text = "Items saved"
        End Using

    End If

End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

    Me.Literal1.Text = ""

    For Each l As ListItem In Me.CheckBoxList1.Items

        ''Concatenate keeping the order of the items in your CheckboxList
        If l.Selected Then
            Me.Literal1.Text = Me.Literal1.Text & l.Value & ","
        End If

    Next

    ''Remove the final "," in case its at the end of the string 
    ''to avoid db issues and selected items issues
    If Right(Me.Literal1.Text, 1) = "," Then
        Me.Literal1.Text = Left(Me.Literal1.Text, Me.Literal1.Text.Length - 1)
    End If

    ''You can also save the items directly after concatenating
    ''Me.SaveItems(Me.Literal1.Text)

End Sub

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click

    Me.SaveItems(Me.Literal1.Text)

End Sub

期待される結果は、ページのアイテムの選択された値をリテラルにすることです。

1,3

お役に立てれば。

于 2012-08-01T18:13:45.197 に答える