Enum или Dict? Что поможет мне здесь? - PullRequest
0 голосов
/ 24 апреля 2009

У меня есть программа ввода и поиска данных winform, которая называется CaseNotes. Это форма, которую нужно заполнить. В форме есть несколько выпадающих, флажков, которые контролируют, что я привязан к данным tblCNMaintItem. Структура этой таблицы ->

ItemID | CategoryID | ItemDescription | OrderID | IsActive

Существует отдельная таблица категорий, которая предоставляет идентификаторы этой категории. CategoryID сопоставляется с одним элементом управления в форме примечаний к делу.

У меня вопрос двоякий:

  1. Как мне узнать стоимость каждого предмета? Например, я беру itemDescription по CategoryID, чтобы заполнить элементы управления, но в SaveNewCaseNote () мне нужно вместо этого получить соответствующий ItemID. Как я могу сделать это? Должен ли я создать диктонар для каждой категории (Контроль)? Должен ли я перечислить комбо ItemID / ItemDescription?

  2. РЕДАКТИРОВАТЬ Забудьте № 2, как я нашел свой ответ.

Спасибо!

EDIT

Хорошо, по какой-то причине я не смог это четко сформулировать, и это вызывает путаницу. Моя БД состоит из 3 таблиц. tblCaseNotes , tblCNMaintCategory , tblCNMaintItem . CaseNotes содержит полное «Case Note» для каждой строки. Таблицы Maint предназначены для ответов с несколькими вариантами ответов при заполнении CaseNote. Пример: они должны выбрать «Расположение контакта». Варианты «Офис» или «Дом участника». В tblCNMaintCategory есть такой вход ->

CategoryID = 3, CatgoryName = Расположение контакта, IsActive = True

В tblCNMaintItem есть 2 записи, такие как ->

ItemID = 51, CategoryID = 2, ItemDescription = Office, OrderID = 0, IsActive = True ItemID = 52, CategoryID = 2, ItemDescription = Дом участника, OrderID = 0, IsActive = True

В tblCaseNote будет такая запись -> CaseNoteID = 3243, PersonID = 454676, AssocContactLocations = 51, а затем еще много столбцов, следующих тому же шаблону

Вопрос 1 относится к желанию сохранить ItemID в AssocContactLocation вместо ItemDescription. Я думаю

Dictionary <strng, int> cLocateItems(itemDescription,itemID) возможно ...

Помогает ли это?

Спасибо всем за потраченное время и усилия!

Ответы [ 3 ]

1 голос
/ 24 апреля 2009

Я не понимаю первую часть, но вторую часть ...

Лучше всего вообще не хранить несколько значений в одном столбце.

Вместо этого вы создаете ссылку «один ко многим» на вторую таблицу, содержащую все значения.

1 голос
/ 24 апреля 2009

После вашего редактирования, я думаю, вы имеете в виду, «Как я могу отобразить текст, но при этом использовать числовой идентификатор при сохранении данных?»

Если это ваш вопрос, то да, ваша словарная идея сработает.

Прошло много времени с тех пор, как я работал с CRUD, но я помню, что вы могли сохранить идентификатор в раскрывающемся списке вместе с текстом. Затем, когда вы делаете обновление, вы будете использовать идентификатор вместо текста. Эта опция может быть проще, чем идея вашего словаря.

Если я до сих пор неправильно понял ваш вопрос, думаю, кому-то еще придется помочь.

0 голосов
/ 25 апреля 2009

Что является основным источником данных для CNMaintItem? Если он уже находится в таблице данных ADO.NET, решение легко. При привязке к элементу управления списком установите для свойства DisplayMember значение «ItemDescription», а для DisplayValue - «ItemID», например:

//dtItem is the DataTable
ddlItem.DataSource = dtItem;
ddlItem.DisplayMember = "ItemDescription";
ddlItem.ValueMember = "ItemID";

или лучше, для строго типизированной таблицы данных:

ddlItem.DataSource = dtItem;
ddlItem.DisplayMember = dtItem.ItemDescriptionColumn.ColumnName;
ddlItem.ValueMember = dtItem.ItemIDColumn.ColumnName;

Вышесказанное также может быть любым видом коллекции объектов. Если у вас есть словарь, вам нужно будет присвоить его объекту словаря объекту BindingSource, а затем назначить объект BindingSource свойству DataSource элемента управления списка:

BindingSource bs = new BindingSource();
bs.DataSource = dictItem;
ddlItem.DataSource = bs;
ddlItem.DisplayMember = "Value";
ddlItem.ValueMember = "Key";

Во всех случаях во время сохранения ItemID доступен через SelectedValue:

int IdToSave = Convert.ToInt32(ddlItem.SelectedValue);
...