有许多问题提出了这个问题的相反问题,遗憾的是,这些问题都没有对我有用。我有以下代码来实现我的目的:
foreach (var item in listBox1.Items)
{
checkedListBox1.Items.Add(item);
}
问题在于,当我执行此操作时,我无法获取ListBox
内的值,而不是System.Data.DataRowView
项。因此,我的CheckedListBox
会填充完整的System.Data.DataRowView
字符串,这些字符串都是相同的,并且不会显示实际的字符串值。
修改:我以这种方式绑定到ListView
:我有DataTable ds
,并且:
listBox1.DataSource = ds;
答案 0 :(得分:2)
由于某些未知原因,DataSource
控件隐藏了DisplayMember
,ValueMember
和CheckedListBox
属性。
如果要复制列表框项目文本,正确的方法是使用ListControl.GetItemText这样的方法
foreach (var item in listBox1.Items)
checkedListBox1.Items.Add(listBox1.GetItemText(item));
但是这样很难找到选中哪个对象来源(例如枚举CheckedItems时)。更好的方法是像这样定义自己的类
class MyListItem
{
public object Value;
public string Text;
public override string ToString() { return Text; }
}
并使用
foreach (var item in listBox1.Items)
checkedListBox1.Items.Add(new MyListItem { Value = item, Text = listBox1.GetItemText(item) });
答案 1 :(得分:1)
您需要执行以下演员:
foreach (var item in listBox1.Items)
{
checkedListBox1.Items.Add((ListItem)item);
}
或者你可以像这样使用:
foreach (ListItem item in listBox1.Items)
{
checkedListBox1.Items.Add(item);
}
即使这也可以帮助你(如果你想要文字和价值,可以这样使用);
for(int i=0;i<listBox1.Items.Count-1;i++)
{
checkedListBox1.Items.Add(new ListItem() { Text = listBox1.Items[i].Text, Value = listBox1.Items[i].Text });
}
答案 2 :(得分:1)
derived ListControl类(如CheckedListBox)显示的文本(当这些控件绑定到数据源时)由属性DisplayMember控制。此属性等于表示数据源中属性(或列名)的名称的字符串。
所以在将新商品添加到checkedlistbox之前,我建议写一下
checkedListBox1.DataSource = listBox1.DataSource
checkedListBox1.DisplayMember = listBox1.DisplayMember
checkedListBox1.ValueMember = listBox1.ValueMember
无需创建循环读取源列表框中的所有项目,只需使用相同的数据源并准备就绪
答案 3 :(得分:1)
试试这个:
foreach (var dataRowView in listBox1.Items.OfType<DataRowView>())
{
checkedListBox1.Items.Add(dataRowView[0].ToString());
}