簡體   English   中英

如何在 ASP.NET C# 中使用 foreach 獲取 CheckBoxList 中所選項目的值?

[英]How to get values of selected items in CheckBoxList with foreach in ASP.NET C#?

我有一個這樣的 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 中獲取所選項目的值,並將這些值放入一個列表中。

請注意,我更喜歡簡短的代碼。

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();
foreach (ListItem item in CBLGold.Items)
{
    if (item.Selected)
    {
        string selectedValue = item.Value;
    }
}

下午好,您總是可以使用一點 LINQ 來獲取選定的列表項,然后對結果執行您想要的操作:

var selected = CBLGold.Items.Cast<ListItem>().Where(x => x.Selected);
// work with selected...

遵循此處的建議,我添加了一個擴展方法,以使用 LINQ 為從System.Web.UI.WebControls. ListControl繼承的任何類型返回所選項目的列表System.Web.UI.WebControls. ListControl System.Web.UI.WebControls. ListControl

每個ListControl對象都有一個ListItemCollection類型的Items屬性。 ListItemCollection公開一個ListItemCollection的集合,每個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()
List<string> values =new list<string>();
foreach(ListItem Item in ChkList.Item)
{
    if(Item.Selected)
    values.Add(item.Value);
}

在@Tim Schmelter 上充值,在其中取回List<int>

List<string> selectedValues = CBLGold.Items.Cast<ListItem>()
   .Where(li => li.Selected)
   .Select(li => li.Value)
   .Select(int.Parse)
   .ToList();

以防萬一您想將選定的值存儲在由 分隔的單列中,那么您可以使用以下方法

string selectedItems = String.Join(",", CBLGold.Items.OfType<ListItem>().Where(r => r.Selected).Select(r => r.Value));

如果要存儲文本而不是值,則將 r.Value 更改為 r.Text

string s= string.Empty

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

{

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

}

在我的代碼隱藏中,我從 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);
 }

輸出符合預期,分號分隔列表供我在 mailsend 函數中使用:

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

一個小問題的長答案。 請注意,我遠不是這方面的專家,並且知道有比這更好的解決方案,但它可能對某些人有所幫助。

如果您有數據綁定checklistbox item(j).Selected ,則無法獲取item(j).Selected ,因為該控件沒有 selected 屬性。 如果你 clearSelections ie on Load,那么顯然它現在理解item(j).selected

我喜歡使用這個簡單的方法來獲取選定的值並將它們連接成一個字符串

private string JoinCBLSelectedValues(CheckBoxList cbl, string separator = "")
{
    return string.Join(separator, cbl.Items.Cast<ListItem>().Where(li => li.Selected).ToList());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM