Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将所选项目返回到checkedListBox中_C#_.net_Winforms_Checkedlistbox_Checklistbox - Fatal编程技术网

C# 如何将所选项目返回到checkedListBox中

C# 如何将所选项目返回到checkedListBox中,c#,.net,winforms,checkedlistbox,checklistbox,C#,.net,Winforms,Checkedlistbox,Checklistbox,我已选中名为的ListBox,它已加载到页面以显示名称而不是ID: 此信息存储在dbo.CHIPSET public void loadCategory() { CLB_CONTROLLER.DataSource = catg.getCategories(); CLB_CONTROLLER.DisplayMember = "CHIPSET"; CLB_CONTROLLER.ValueMember = "CHIPSET_ID"; } 然后我将数据作为字符串插入数据库。此信

我已选中名为的ListBox,它已加载到页面以显示名称而不是ID: 此信息存储在
dbo.CHIPSET

public void loadCategory()
{
    CLB_CONTROLLER.DataSource = catg.getCategories();
    CLB_CONTROLLER.DisplayMember = "CHIPSET";
    CLB_CONTROLLER.ValueMember = "CHIPSET_ID";
}
然后我将数据作为字符串插入数据库。此信息存储在
dbo.MYDB

//LOOP THROUGH CONTROLLER CHECKED ITEMS TO INSERT ALL SELECTED
string chip = "";
for (int i = 0; i < CLB_CONTROLLER.CheckedItems.Count; i++)
{
    if (chip == "")
    {
        chip = CLB_CONTROLLER.GetItemText(CLB_CONTROLLER.CheckedItems[i]);
    }
    else
    {
        chip += ", " + CLB_CONTROLLER.GetItemText(CLB_CONTROLLER.CheckedItems[i]);
    }
}

任何帮助都将不胜感激。

假设您已将
a、b、c、d、e、f
作为项目文本填写在
检查列表框中

然后,您可以通过以下方式基于逗号分隔的列表设置选中项:

var itemsToSelect = "a,c,d";
var items = itemsToSelect.Split(',');
for (var i = 0; i < checkedListBox1.Items.Count; i++)
{
    var b = items.Contains(checkedListBox1.GetItemText(checkedListBox1.Items[i]));
    checkedListBox1.SetItemChecked(i, b);
}
var itemsToSelect=“a,c,d”;
var items=itemsToSelect.Split(',');
对于(变量i=0;i
您还可以通过以下方式获取逗号分隔字符串中的选中项:

var selectedItems = string.Join(",",
    checkedListBox1.CheckedItems.Cast<object>()
        .Select(x => checkedListBox1.GetItemText(x)));
var selectedItems=string.Join(“,”,
checkedListBox1.CheckedItems.Cast()
.Select(x=>checkedListBox1.GetItemText(x));

如果以逗号分隔的字符串存储项的文本,
ValueMember
的用法是什么?根据用户在
dataGrid
视图上的选择,这些项将不断添加到
checkedListBox1
,而这正是我想要的。我要说的是,因为假设用户错误地选择了错误的芯片组,并且想要更新选择,使用上面提出的方法,他们将无法做到这一点,因为完整的列表将不可用。我希望他们能够看到完整的列表,就像上面我的图片所示,但同时,当他们从
dataGrid
中选择某些内容时,会检查相应的项目。在我的代码
中,a、b、c、d、e、f就是完整的列表。例如,如果我创建了新的,比如说
checkedListBox1
,我可以用上面的代码实现我想要的,我不需要从数据库中填充列表,而是手动将项目添加到
checkedListBox1
。那么我上面的代码就可以工作了。但是我正在尝试重用我已经有的
CLB\u控制器
复选框。您可以使用任何逻辑填充
CheckedListBox
。示例代码完全独立于您填写
CheckedListBox
的方式。它只接受逗号分隔的列表,并在
CheckedListBox
中选择它们。它还可以将
CheckedItems
转换回逗号分隔的字符串。您的用户应该能够在所有项目之间进行选择。另外,
CheckedListBox
应该能够根据单元格中以逗号分隔的列表显示选中的项目。此外,您还应该能够将选中的项目作为逗号分隔的列表放回。示例代码与项目列表无关,它假定您已用项目填充了
CheckedListBox
。我相信,这正是你想要的
var selectedItems = string.Join(",",
    checkedListBox1.CheckedItems.Cast<object>()
        .Select(x => checkedListBox1.GetItemText(x)));