簡體   English   中英

如何在CheckedListBox中檢索CheckedItems的文本

[英]How to retrieve texts for CheckedItems in CheckedListBox

我有一個包含動態數據的CheckBoxList。現在我想從CheckBoxList獲取所選項目的列表。 我正在使用以下代碼。

for (int i = 0; i < chkTblListDb001.Items.Count; i++)
{
    if (chkTblListDb001.GetItemChecked(i))
    {
          FirstTableSelectedColumns += chkTblListDb001.Items[i].ToString() + ",";
          MessageBox.Show(FirstTableSelectedColumns);
    }
}

但是返回(在FirstTableSelectedColumns變量中)“System.Data.DataRowView,System.Data.DataRowView”,

當我使用此代碼時

string test = "you've selected :";

foreach (ListItem item in theCheckBoxList.Items)
{
    test += item.Selected ? item.Value + ", " : "";
}
labelResult.Text = test;

它給我以下錯誤

找不到ListItem。

要獲取CheckedListBox項目的文本,您可以使用GetItemText

項目的類型無關緊要,如果您使用了DataSourceDisplayMember它使用DisplayMember返回文本,否則它使用項目的ToString方法。

以下是您要查找的內容的示例,以逗號分隔的已檢查項目文本列表:

var texts = this.checkedListBox1.CheckedItems.Cast<object>()
                .Select(x => this.checkedListBox1.GetItemText(x));

MessageBox.Show(string.Join(",", texts));

解決方法是((DataRowView)chkTblListDb001.Items [i])[0] .ToString()

 string FirstTableSelectedColumns = "";
      for (int i = 0; i < chkTblListDb001.Items.Count; i++)
            {
              if (chkTblListDb001.GetItemChecked(i))
                 {
                 //FirstTableSelectedColumns += chkTblListDb001.Items[i].ToString() + ",";
                   FirstTableSelectedColumns += ((DataRowView)chkTblListDb001.Items[i])[0].ToString() + ",";
                   MessageBox.Show(FirstTableSelectedColumns);
                 }
             }

感謝@Pikoh

使用CheckedItems方法。

       StringBuilder sbCheckedItems = new StringBuilder();

        foreach (var cbx in chkTblListDb001.CheckedItems)
        {
            sbCheckedItems.Append(cbx.ToString() + ",");
        }
        MessageBox.Show(sbCheckedItems.ToString());

嘗試以下操作,將此類添加到項目中

using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
public static class CheckedListBoxExtensions
{
    public static string CheckedItemsJoined(this CheckedListBox sender)
    {
        var Result = from singleItem in sender.Items.OfType<string>().Where(
                         (item, index) =>
                         {
                             return sender.GetItemChecked(index);
                         }
                     )
                     select singleItem;

        return string.Join(",", Result.ToList<string>());
    }
}

現在在表單中,使用在此之后建模的代碼(意味着您需要更改控件的名稱以匹配您的控件。

someLabel.Text = checkedListBox1.CheckedItemsJoined();

希望這就是你所追求的。

暫無
暫無

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

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