我有一个使用Windows表单绑定到复选框列表的linq查询

var webresourcesFromCRM = from w in orgSvcContext.CreateQuery("webresource")
                          select new
                          {
                              webresourceid = w["webresourceid"],
                              name = w["name"]
                          };


绑定时我使用了DisplayMember和ValueMember属性

cblWebResources.DataSource = webresourcesFromCRM;
cblWebResources.DisplayMember = "name";
cblWebResources.ValueMember = "webresourceid";


上面的代码效果很好。但是我的问题是我想获取选中项目的ValueMember。我尝试了cblWebResources.SelectedItems或cblWebResources.SelectedIndices的每种组合。我只希望能够遍历我选择的项目并将每个ValueMember放入Windows窗体应用程序中。

我尝试过其他帖子,例如但不走运,这是Windows窗体应用程序

var selectedItems = checkedUsers.Items.Cast<ListItem>()
                                      .Where(li => li.Selected)
                                      .Select(li => int.Parse(li.Text));
int sum = selectedItems.Sum();
string items = string.Join(",", selectedItems);

最佳答案

CheckedListBox方便地兼有:

 var c = checkedListBox1.CheckedItems;
 var s = checkedListBox1.SelectedItems;


现在您得到了交集:

var cs = c.Cast<object>().Where(i => s.Contains(i));
var sc = s.Cast<object>().Where(i => c.Contains(i));


遗憾的是,CheckedListBoxes不支持MultiSelect,因此第二种形式应该更好。

可惜的是,它还没有绑定Checkboxes的选项:-(

09-11 23:45