78

次のような CheckBoxList があります。

<asp:CheckBoxList ID="CBLGold" runat="server" CssClass="cbl">
    <asp:ListItem Value="TGJU"> TG </asp:ListItem>
    <asp:ListItem Value="GOLDOZ"> Gold </asp:ListItem>
    <asp:ListItem Value="SILVEROZ"> Silver </asp:ListItem>
    <asp:ListItem Value="NERKH"> NE </asp:ListItem>
    <asp:ListItem Value="TALA"> Tala </asp:ListItem>
    <asp:ListItem Value="YARAN"> Sekeh </asp:ListItem>
</asp:CheckBoxList>

ここで、foreach を使用してこの CheckBoxList から選択した項目の値を取得し、その値をリストに入れたいと考えています。

4

11 に答える 11

200

コードは短い方がよいことに注意してください。

List<ListItem> selected = CBLGold.Items.Cast<ListItem>()
    .Where(li => li.Selected)
    .ToList();

または単純なforeach:

List<ListItem> selected = new List<ListItem>();
foreach (ListItem item in CBLGold.Items)
    if (item.Selected) selected.Add(item);

あなただけが欲しいならListItem.Value

List<string> selectedValues = CBLGold.Items.Cast<ListItem>()
   .Where(li => li.Selected)
   .Select(li => li.Value)
   .ToList();
于 2013-09-20T19:12:43.223 に答える
10

こんにちは、いつでも小さな LINQ を使用して、選択したリスト項目を取得し、結果に対して必要なことを行うことができます。

var selected = CBLGold.Items.Cast<ListItem>().Where(x => x.Selected);
// work with selected...
于 2013-09-20T19:15:00.663 に答える
2

ここでの提案に合わせて、拡張メソッドを追加して、LINQ を使用して、継承元の任意の型に対して選択された項目のリストを返します。System.Web.UI.WebControls.ListControl

すべてListControlのオブジェクトにはItemstype のプロパティがありますListItemCollectionListItemCollectionのコレクションを公開します。ListItemsそれぞれにSelectedプロパティがあります。

Cシャープ:

public static IEnumerable<ListItem> GetSelectedItems(this ListControl checkBoxList)
{
    return from ListItem li in checkBoxList.Items where li.Selected select li;
}

ビジュアルベーシック:

<Extension()> _
Public Function GetSelectedItems(ByVal checkBoxList As ListControl) As IEnumerable(Of ListItem)
    Return From li As ListItem In checkBoxList.Items Where li.Selected
End Function

次に、どちらかの言語で次のように使用します。

myCheckBoxList.GetSelectedItems()
于 2014-02-20T15:53:31.097 に答える
1
List<string> values =new list<string>();
foreach(ListItem Item in ChkList.Item)
{
    if(Item.Selected)
    values.Add(item.Value);
}
于 2016-02-03T08:17:56.347 に答える
1

コントロールに選択された属性がないため、データバインドがある場合checklistbox、 get は機能しません。item(j).Selectedロード時に選択をクリアすると、どうやらそれが理解できるようになりitem(j).selectedました。

于 2020-08-18T22:47:58.010 に答える
0

私のコードビハインドでは、Page_Load イベントで SQL db からチェックボックス リストを作成し、button_click イベントですべての値をチェックボックス リストなどから取得しました。

したがって、いくつかのチェックボックスをチェックしてからボタンをクリックすると、最初に page_load イベントがチェックボックスリストを再作成したため、チェックボックスの値を取得するときにボックスがチェックされませんでした... page_load イベントに追加するのを逃しましたif (!this.IsPostBack)

protected void Page_Load(object sender, EventArgs e)
{
   if (!this.IsPostBack)
   {
      // db query and create checkboxlist and other
      SqlConnection dbConn = new SqlConnection(WebConfigurationManager.ConnectionStrings["ConnString"].ConnectionString);
      string query;
      try
      {
        query = "SELECT [name], [mail] FROM [users]";
        dbConn.Open();
        SqlDataAdapter da = new SqlDataAdapter(query, dbConn);
        DataSet ds = new DataSet();
        da.Fill(ds);
        if (ds.Tables[0].Rows.Count != 0)
        {
          checkboxlist1.DataSource = ds;
          checkboxlist1.DataTextField = "name";
          checkboxlist1.DataValueField = "mail";
          checkboxlist1.DataBind();
        }
        else
        {
          Response.Write("No Results found");
        }
       }
       catch (Exception ex)
       {
          Response.Write("<br>" + ex);
       }
       finally
       {
          dbConn.Close();
       }
   }
}

protected void btnSend_Click(object sender, EventArgs e)
 {
   string strChkBox = string.Empty;
   foreach (ListItem li in checkboxlist1.Value)
    {
      if (li.Selected == true)
       {
         strChkBox += li.Value + "; ";    
         // use only   strChkBox += li + ", ";   if you want the name of each checkbox checked rather then it's value.
       }
    }
   Response.Write(strChkBox);
 }

出力は期待どおりで、メール送信関数で使用するためのセミコロン区切りのリストです。

    bill@contoso.com; jeff@corp.inc; sam@dot.net

小さな問題に対する長い答え。私はこれの専門家とはかけ離れており、これよりも優れた解決策があることを知っていますが、一部の人にとっては役立つかもしれないことに注意してください.

于 2016-05-11T22:34:40.877 に答える
0
string s= string.Empty

for (int i = 0; i < Chkboxlist.Items.Count; i++)

{

    if (Chkboxlist.Items[i].Selected)
    {
        s+= Chkboxlist.Items[i].Value + ";"; 
    }

}
于 2014-12-27T12:56:11.257 に答える