2012-02-13 4 views
0

Я хочу, чтобы каждый элемент DataGridViewComboBoxCell был индивидуальным (в каждом DataBridCellBoxCell каждый элемент должен иметь разные элементы). Я использую этот код, чтобы установить элементы:Настройка элементов данных DataGridViewComboBoxCell

foreach (DataGridViewRow row in grid.Rows) 
{ 
    ((DataGridViewComboBoxCell)row.Cells[1]).Items.Clear(); 
    foreach (Product prod in _ProductList) 
    { 
     ((DataGridViewComboBoxCell)row.Cells[1]).Items.Add(prod.Name); 
    } 
} 

Debugging я вижу товар DataGridViewComboBoxCell правильно установлен, но когда я смотрю на сетку, комбо пусты.

Выполнение различных тестов Я понял, что если я устанавливаю элементы после загрузки формы (например, в событии с кликом), элементы отображаются нормально.

Что мне делать, чтобы загрузить элементы в режиме загрузки формы?

+0

У DataGridViewCombox есть связанный с ним DataSource .. Интересно, если установить DataSource для этого конкретного элемента в string.Empty будет исправлять вашу проблему .. Звучит как проблема с DataBinding, посмотрите на эту ссылку, чтобы, возможно, выбрать Alternate DataSource, затем установить элементы, которые вы пытаетесь установить через цикл foreach, у вас есть http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcomboboxcell.aspx – MethodMan

+0

Вот еще одна полезная ссылка, которая объяснит это даже more .. http://homepage.ntlworld.com/herring1/datagrid.html – MethodMan

+0

В качестве альтернативы я попытался использовать DataSource вместо того, чтобы устанавливать элементы в то время как looop. Но проблема остается прежней. Если я установил DataGridViewComboBoxColumn вместо DataGridViewComboBoxCell, элементы будут правильно заполнены в сетке, но это решение невозможно для меня, потому что каждая ячейка имеет разные элементы. – joaocarlospf

ответ

1

В какой функции вы используете свою петлю foreach? Если в конструкторе это может быть слишком рано. Попробуйте переместить его в Form_Load или другой обработчик, который запускается позже.

Я ответил на вопрос об установке текущего значения поля со списком в столбце here, и у вас может возникнуть аналогичная проблема. Я знаю, что настройка ячеек DataSource работает, если вы делаете это достаточно поздно в жизненном цикле элемента управления, потому что я сделал это here.

+0

PERFECT! Код был на конструкторе. Когда я перешел к методу OnLoad, он работал отлично! Это решило мою проблему очень хорошо. Большое спасибо. – joaocarlospf

+0

Я просто не понимаю, почему невозможно заполнить ячейку combobox в конструкторе. – joaocarlospf

+0

Элементы управления WinForms C# - это просто обертки по старым вызовам API Windows C с их флагами и сообщениями и сумасшествием. Между конструкцией и нагрузкой происходит всевозможные вещи, и одна из таких вещей - это, вероятно, строительство контейнера для выбора сотовых коробок. Перед тем, как он будет создан, вызов для установки выбора (который, вероятно, отправляется как сообщение с параметрами и т. Д.), Просто игнорируется базовым API. Это было полупомощное объяснение, основанное на туманных воспоминаниях о Windows API и не должно использоваться в производственном коде;) –

Смежные вопросы