2015-04-01 1 views
0

Вопрос был задан раньше в StackOverflow, поэтому вы можете подумать, что это дубликат, но я пробовал ряд решений, но я все еще застрял.Невозможно получить значение и DisplayMember из CheckedListBoxControl, привязанного к LINQ

У меня есть проверенный метод WinFormsListBoxControl, связанный с запросом LINQ, и я не могу получить значения и отображения.

Ниже приведены некоторые попытки, чтобы получить значения Value и DisplayMember:

var avail = from c in dc.CostCenters 
         select new { Item = c.CostCenterID, 
           Description = c.CostCenterID + ": " + c.Description }; 
       myList.DataSource = avail; 
       myList.DisplayMember = "Description"; 


     //Retrieval: 
     foreach (var item in myList.CheckedItems) 
     { 
      DataRowView row = item as DataRowView; //Try 1: row is empty 
      string displayMember = item["Description"]; //Try 2: Cannot apply indexing with [] to an expression of type 'object' 
      var x = item[0]; //Try 3: Cannot apply indexing with [] to an expression of type 'object' 
      row3 = ((DataRowView)myList.CheckedItems[item]).Row; //Try 5 million: Compile error - invalid arguments 
     } 
+0

какой 'item.GetType()'? Вы используете стандартный [CheckedListBox] (https://msdn.microsoft.com/ru-ru/library/system.windows.forms.checkedlistbox (v = vs.110) .aspx) или некоторые сторонние библиотеки с элементами управления? – Grundy

+0

Я пробовал как стандартную, так и DevExpress. Я не против, какой из них работает. Для целей этого поста я должен посмотреть на стандартный элемент управления, поскольку это не форум devExpress. –

+0

item.GetType() = Name = "<> f__AnonymousTypeb6'2" –

ответ

0

Предполагая, что вы просто хотите получить/отображать ValueMembers/DisplayMembers: Из образца вы предоставляете я предполагаю, что вы получите IEnumerable<dynamic> от вашего linq запрос. Я преобразовал его для моего тестового сценария к List<dynamic>:

List<dynamic> list = new List<dynamic> 
{ 
    new { Item = 1, Description = "1: Item1"}, 
    new { Item = 2, Description = "2: Item2"} 
}; 

просто добавьте BindingSource к CheckedListBox:

BindingSource bindingSource = new BindingSource(list, null); 

checkedListBox1.DataSource = bindingSource; 
checkedListBox1.ValueMember = "Item"; 
checkedListBox1.DisplayMember = "Description"; 

Когда вы выбрали ваши вопросы, и вы хотите, чтобы проверить его:

var checkedItems = checkedListBox1.CheckedItems; 
foreach (dynamic checkedItem in checkedItems) 
{ 
    Console.WriteLine("valuemember: " + checkedItem.Item); 
    // or whatever code you have 
} 

Надеюсь, это поможет!