Porównaj ceny domen i usług IT, sprzedawców z całego świata

przekazanie wybranych elementów listy wyboru w postaci połączonego ciągu


Próbuję przekazać wybrane elementy z listy pól wyboru do asp.net (w porównaniu z 2005/.net 2,0) jako połączony ciąg.
Obecnie mój plik .aspx to
<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>

A plik .aspx.vb jest (w ramach bezpiecznej umowy podwykonawczej do wysłania)
For Each li As ListItem In checkbox1.Items
If li.Selected = True Then
checkbox1.Text = checkbox1.Text + "," + li.Text
End If
Next

Który jest zapisywany w bazie danych za pośrednictwem
checkbox1.Text = dv(0)("Salad").ToString()

Kiedy wybieram i zapisuję, obecnie pojawia się błąd

Błąd serwera w aplikacji „/”.
>
Pole wyboru 1 ma wartość SelectedValue, która jest nieprawidłowa, ponieważ nie istnieje na liście pozycji.
Nazwa parametru: wartość
Wszelkie przemyślenia na temat łączenia zaznaczonych elementów pola wyboru
Na przykład, jeśli ktoś wybierze marchewkę, sałatę i pomidora;
checkbox1 = 1,2,5

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Nie sądzę, że przypisujesz zmiennej sposób, w jaki opisujesz, co zwracasz.
string list = "";
For Each li As ListItem In chkQ4.Items
If li.Selected = True Then
list = list + "," + li.Text
End If
Next

tak powinieneś napisać powyższą linię.
W C # za pomocą linq napisałbym
var list = checkbox1.Items.Cast<ListItem>().Where(item => item.Selected == true).Select(item => item.Value);
var result = string.Join(",",list);

który, jak sądzę, jest następujący w 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())
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

To jest mały przykład
Markup:
<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><asp:Literal ID="Literal1" runat="server"></asp:Literal><asp:Button ID="Button1" runat="server" Text="Concatenate"/>
<asp:Button ID="Button2" runat="server" Text="Save"/>

Odłączony kod:
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 IfEnd SubProtected 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 SubProtected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click Me.SaveItems(Me.Literal1.Text)End Sub

Oczekiwanym rezultatem jest to, że na stronie znajdują się wybrane wartości pozycji.:
1,3

Mam nadzieję że to pomoże.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się