2013-03-25 2 views
0

Я получаю список объектов (Люди) из базы данных и динамически генерирую список меток с именем каждого объекта People в форме в групповом поле. Когда я нажимаю на метку, я создаю новую форму со всеми свойствами объекта People (я отправляю дочерний элемент объекта People). Где сохранить идентификатор объекта People (из базы данных) или идентификатор из списка? Теперь я сохраняю идентификатор в ярлыке. TabIndex, но не слишком хорошо.Отправка данных между формами. (Привязка идентификатора метки?)

Что вы будете делать в этой ситуации?

Отредактировано после ответов: Спасибо всем за отзыв.

(Хорошо, я вижу, что Actually WPF came to replace WinForms так было бы лучше для меня, чтобы перейти на WPF.)

мне не нужно, чтобы сохранить полный объект в этикетке, но только его идентификатор (этот объект может имеют, внутренние, другие ассоциации объектов базы данных). Почему мне нужно сохранить полный объект в ярлыке? Я не хочу этого!
До сих пор я сохраняю идентификатор в tabIndex (потому что это int), и я вижу, что это лучше, потому что он не использует бокс и unboxing.

Эта проблема делает часть вопроса более общей.
Как отправить данные между формами? Вы разрешаете дочерней форме иметь доступ к репозиторию? (Я не могу отправить репозиторий между формами.) Но что, если мне нужно изменить данные в дочерней форме (person form = it print data только для одного человека), тогда мне нужно отправить «save Changes» 'semnal (через событие) в мою основную форму. Так это похоже на двунаправленные ассоциации между двумя формами. Хорошо ли это?

У вас есть книга для winforms (данные между формами) или одно реальное приложение в C# WinFroms?

+1

'Как вы это делали?' - Я использовал WPF вместо winforms, который имеет серьезную структуру привязки и обеспечивает четкое и точное разделение между пользовательским интерфейсом и данными. –

ответ

1

Не существует ли еще Tag недвижимости в WinForms? Это удобно для хранения такой информации.

1

Вы можете сохранить объект Id или People в Label.Tag.
Затем, чтобы получить его, вы можете использовать

var person = Label.Tag as People 
1

, как правило, разработчики полагаются на имущество Tag контроля, хотя я считаю, это довольно хрупкое решение, так как вы можете использовать это свойство для чего-то еще в будущее. Возможное простое решение - назвать ваши метки и хранить пары {ControlName, ID} в Hashtable/Dictionary. Другим решением, которое, я думаю, еще лучше, является сохранение пар {Control Reference, ID} в Hashtable/Dictionary. Это должно сделать все проще, так как вам не придется создавать имена для ваших ярлыков.

Ниже приведен пример кода.

var peopleDictionary = new Dictionary<Label, int>(); 

foreach (var person in people) 
{ 
    var control = new Label(); 

    peopleDictionary.Add(person, person.ID); 

    groupBox.Controls.Add(control); 
} 
+0

Ваш код не строится. –

+0

Ваше решение немного переборщило. Это именно то, для чего было создано свойство Tag. Почему вы хотите сохранить его для чего-то еще в будущем? – Icemanind

+1

@icemanind Может ли коробка и распаковка быть менее «overkil»? Тривиальный пример использования его для чего-то другого - это когда вам нужно больше свойств в этом теге.Предположим, вы хотите, чтобы весь объект Person находился в свойстве Tag. Чем ты занимаешься? Исправьте весь код ??? – crissdev

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