【问题标题】:Getting CheckBoxList Item values获取 CheckBoxList 项值
【发布时间】:2012-09-14 17:58:54
【问题描述】:

我有一个 CheckBoxList,我正在填充数据。当我尝试从列表中检索选中的项目时,我只能获取项目序号,无法获取值。

我读到你可以使用 Items[i].Value 但是当我尝试这样做时,我收到一个错误,指出没有扩展方法'value'。

这是我用来尝试获取信息的代码(注意 GetItemText(i) 实际上只给了我项目的位置,而不是项目的文本)

   private void btnGO_Click(object sender, EventArgs e)
{
    for (int i = 0; i < chBoxListTables.Items.Count; i++)
    {
        if (chBoxListTables.GetItemChecked(i))
        {
            string str = chBoxListTables.GetItemText(i);
            MessageBox.Show(str);

            //next line invalid extension method
            chBoxListTables.Items[i].value;
        }
    }
}

这是使用 .Net 4.0

任何想法将不胜感激...谢谢

【问题讨论】:

  • 是winform还是asp.net?
  • @user1669725 chBoxListTables.CheckedItems 不起作用吗?
  • 不是我不能抓取CheckedItems,只是我无法获取它们的文本值,而只是它们的位置,即0,1,2
  • chBoxListTables.Items[i].GetType() 给你什么?你能设置一个断点,然后用 quickwatch 看一下吗?
  • 您的代码中的“值”实际上是小写的吗?可能想检查一下。

标签: c# winforms checklistbox


【解决方案1】:

这最终变得非常简单。 chBoxListTables.Item[i] 是一个字符串值,显式转换允许将其加载到变量中。 以下代码有效:

private void btnGO_Click(object sender, EventArgs e)
{
    for (int i = 0; i < chBoxListTables.Items.Count; i++)
    {
          if (chBoxListTables.GetItemChecked(i))
        {
            string str = (string)chBoxListTables.Items[i];
            MessageBox.Show(str);
        }
    }
}

【讨论】:

    【解决方案2】:

    尝试使用它。

            for (int i = 0; i < chBoxListTables.Items.Count; i++)
            {
                if (chBoxListTables.Items[i].Selected)
                {
                    string str = chBoxListTables.Items[i].Text;
                    MessageBox.Show(str);
    
                    var itemValue = chBoxListTables.Items[i].Value;
                }
            }
    

    “V”的值应使用大写字母。

    这是另一个在 WinForm 应用程序中使用并正常运行的代码示例。

            var chBoxList= new CheckedListBox();
            chBoxList.Items.Add(new ListItem("One", "1"));
            chBoxList.Items.Add(new ListItem("Two", "2"));
            chBoxList.SetItemChecked(1, true);
    
            var checkedItems = chBoxList.CheckedItems;
            var chkText = ((ListItem)checkedItems[0]).Text;
            var chkValue = ((ListItem)checkedItems[0]).Value;
            MessageBox.Show(chkText);
            MessageBox.Show(chkValue);
    

    【讨论】:

    • 这不起作用。扩展方法仍然不存在。
    • 将 System.Web 的引用添加到您的项目中,然后添加“使用 System.Web.UI.WebControls;”进入你的班级。
    • @Nitesh:阅读问题。他使用的是winform而不是asp.net
    • @geek:System.Web.UI.WebControls 与 WinForms 一起使用。
    【解决方案3】:

    要检查项目,您可以使用CheckedItemsGetItemsChecked。我在 .NET 4.5 中尝试了以下代码

    遍历CheckedItems 集合。这将为您提供检查项目列表中的项目编号,而不是整个列表。所以如果列表中的第一项没有被选中而第二项被选中,下面的代码会显示类似Checked Item 1 = MyListItem2这样的文字。

    //Determine if there are any items checked. 
    if(chBoxListTables.CheckedItems.Count != 0)  
    {
        //looped through all checked items and show results.
        string s = "";
        for (int x = 0; x < chBoxListTables.CheckedItems.Count; x++)
        {
            s = s + (x + 1).ToString() + " = " + chBoxListTables.CheckedItems[x].ToString()+ ", ";
        }
        MessageBox.Show(s);//show result
    }
    

    -或-

    遍历 Items 集合并为每个项目调用 GetItemChecked 方法。这将为您提供整个列表中的项目编号,因此如果未选中列表中的第一项而选中了第二项,则会显示类似Item 2 = MyListItem2 的内容。

    int i;  
    string s;   
    s = "Checked items:\n" ;  
    for (i = 0; i < checkedListBox1.Items.Count; i++)  
    {  
       if (checkedListBox1.GetItemChecked(i))  
       {  
          s = s + "Item " + (i+1).ToString() + " = " + checkedListBox1.Items[i].ToString() + "\n";  
       }  
    }  
    MessageBox.Show (s);
    

    希望这会有所帮助...

    【讨论】:

      【解决方案4】:

      //简单示例代码:

      foreach (var item in YourCheckedListBox.CheckedItems)
      {List<string>.Add(item);}
      

      【讨论】:

        【解决方案5】:

        你可以试试这个:-

        string values = "";
        foreach(ListItem item in myCBL.Items){
        if(item.Selected)
        {
        values += item.Value.ToString() + ",";  
        }
        }
        values = values.TrimEnd(',');  //To eliminate comma in last.
        

        【讨论】:

          【解决方案6】:

          而不是这个:

          CheckboxList1.Items[i].value;
          

          试试这个:

          CheckboxList1.Items[i].ToString();
          

          它对我有用:)

          【讨论】:

            【解决方案7】:

            尝试使用这个:

             private void button1_Click(object sender, EventArgs e)
                {
            
                    for (int i = 0; i < chBoxListTables.Items.Count; i++)
                        if (chBoxListTables.GetItemCheckState(i) == CheckState.Checked)
                        {
                           txtBx.text += chBoxListTables.Items[i].ToString() + " \n"; 
            
                        }
                }
            

            【讨论】:

              【解决方案8】:

              您可以初始化一个字符串列表并添加那些被选中的项目。

              请检查代码,对我来说很好。

              List<string> modules = new List<string>();
              
              foreach(ListItem s in chk_modules.Items)
              {
                  if (s.Selected)
                  {
                       modules.Add(s.Value);
                  }
              }
              

              【讨论】:

              • 在列表中添加 ,不知道为什么我不能发布。
              【解决方案9】:

              这将为您解决问题:

              foreach (int indexChecked in checkedListBox1.CheckedIndices)
              {
                  string itemtxt = checkedListBox11.Items[indexChecked];
              }
              

              它将返回选中列表框项中的任何字符串值。

              【讨论】:

                猜你喜欢
                • 2013-05-26
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2023-04-04
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多