C# 如何在CheckedListBox中检索CheckedItems的文本

C# 如何在CheckedListBox中检索CheckedItems的文本,c#,.net,winforms,data-binding,checkedlistbox,C#,.net,Winforms,Data Binding,Checkedlistbox,我有一个包含动态数据的复选框列表。现在我想从复选框列表中获取所选项目的列表。我正在使用以下代码 for (int i = 0; i < chkTblListDb001.Items.Count; i++) { if (chkTblListDb001.GetItemChecked(i)) { FirstTableSelectedColumns += chkTblListDb001.Items[i].ToString() + ","; Me

我有一个包含动态数据的复选框列表。现在我想从复选框列表中获取所选项目的列表。我正在使用以下代码

for (int i = 0; i < chkTblListDb001.Items.Count; i++)
{
    if (chkTblListDb001.GetItemChecked(i))
    {
          FirstTableSelectedColumns += chkTblListDb001.Items[i].ToString() + ",";
          MessageBox.Show(FirstTableSelectedColumns);
    }
}
这给了我以下的错误:

未找到ListItem

解决方案是((DataRowView)chkTblListDb001.Items[i])[0].ToString()

string FirstTableSelectedColumns=“”;
对于(int i=0;i
感谢@Pikoh

获取您可以使用的项目文本

无论项目的类型是什么,如果您使用了
DataSource
displayember
它使用
displayember
返回文本,否则它使用
ToString
项目方法

以下是您正在查找的示例,以逗号分隔的选中项文本列表:

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

MessageBox.Show(string.Join(",", texts));
var text=this.checkedListBox1.CheckedItems.Cast()
.Select(x=>this.checkedListBox1.GetItemText(x));
Show(string.Join(“,”,text));

使用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>());
    }
}

希望这就是您所追求的。

您必须展示如何绑定该列表,但基本上,您需要将
chkTblListDb001.Items[i]
转换为
DataRowView
,然后获得要显示的
DataRowView
列,类似于
((DataRowView)chkTblListDb001.Items[i])[0]。ToString()
Windows窗体没有
复选框列表
控件。你是说
CheckedListBox
?是的@Reza Aghaei我是说was CheckedListBox.thankx@Pikoh你给的代码对我有用:)不客气……)如果该项不是字符串类型,则该代码不返回任何内容。最稳定的解决方案是使用
GetItemText
方法。如果项的类型是对象,则您将收到对象的
ToString()
,在本例中,OP的结果是
System.Data.DataRowView
,因为他似乎在使用
DataTable
作为
DataSource
。使用
GetItemText
查找文本,并使用
string.Join
连接字符串列表中的项目。
       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();