отображение данных с разных таблиц (2)
PAB
Дата: 18.05.2006 12:32:13
Здравствуйте!
Помогите с такой проблемой
У меня есть 3-и таблицы
1. Область
ID_REGION
NAME_REGION
2. Город
ID_CITY
NAME_CITY
IDREGION (для связи с Областью)
3. Жители
ID_PEOPLE
FIO
IDREGION (для связи с Областью)
IDCITY (для связи с Городом)
Сделал DataSet с 3-мя этими таблицами и установил необходимые связи (DataRelation), установил навигацию на Таблице Жители с отображением данных с родительских таблиц (Область и Город) все работает
Проблема - хочу при добалении человечка в таблицу Жители сделать выбор из ComBox желаемую облатсть, а потом у меня не получается отобразить в ComboBox по выбранной области все города из этой области из связанной таблицы Город у меня все возможные города выбирает.
Проблема, как такое организовать, как доступится только к нужным городам!
Спасибо
winsky!
Дата: 18.05.2006 12:39:03
сделайте источником для ComboBox-а городов DataView где фильтруйте города по выбранной области.
а нафиг ссылка на регион в жителях?
житель по идее ссылается на регион через город...
winsky!
Дата: 18.05.2006 12:52:10
и вот это почитайте отседова
http://www.sql.ru/forum/rules.aspxРекомендации
Не рекомендуется:
Публиковать сообщения с бессмысленными темами. Например: <Люди помогите>, <Проблема!!>, <Срочно нужна помощь!>, <может знаете?> и т.д.
Задавать несколько вопросов из разных областей в одном сообщении.
Отправлять сообщение одновременно в несколько форумов. Модераторы соответствующих форумов вправе удалить такие сообщения.
Создавать несколько топиков с одинаковым вопросом
PAB
Дата: 18.05.2006 13:11:53
winsky!
2-ой топик удалили уже
Если есть какой-нить кусочек кода пришлите!
Заранее спасибо!
winsky!
Дата: 18.05.2006 13:26:15
его удалили, когда я это писал ;)
кусочек кода навскидку
наверное, это нужно поместить в обработчик события ValueMemberChanged комбобокса регионов
DataView dwCitiesByRegion = new DataView(ds.Tables["Cities"]);
dwCitiesByRegion.RowFilter = "IDREGION = " + comboRegions.SelectedValue.ToString();
comboCities.DataSource = dwCitiesByRegion;
comboCities.ValueMember = "ID_CITY";
comboCities.DisplayMember = "NAME_CITY"; |
winsky!
Дата: 19.05.2006 10:22:00
еще, если связь между таблицами существует можно источником для комбо городов делать дочерние строки текущего региона (GetChildRows) - тоже во оброботчике события изменения мембера
PAB
Дата: 19.05.2006 15:00:04
winsky!
Спасибо! Все это сделал, но теперь вылезла ошибка с навигацией (реньше не было, т к у меня в ComboBox отображались все возможные города)
Проблема в том, что теперь установив фильтрацию я не могу организовать навигацию по таблице Житель (вернее не отображаются данные не попавшие в фильтр), например, ValueMemberChanged не будет вызываться т к область будет такой же, а вот город при навигации поменяется, как вариант в кнопках навигации вызывать принудительно ValueMemberChanged!
Как быть??
Причем я сделал в ValueMemberChanged привязку
Binding binding = new Binding("SelectedValue",dataSet1, "Житель.IDRAI");
cbRAION.DataBindings.Add(binding);
это неправильно, думаю что можно один раз создавать привязку на этапе занесения данных в таблицу Житель а не все время когда вызывается ValueMemberChanged
winsky!
Дата: 19.05.2006 15:07:26
что-то я не совсем понял саму идею - в чем вы выводите жителей, и задача в целом какая?
PAB
Дата: 19.05.2006 15:27:42
winsky!
Какая задача!
1 . Сделать навигацию по таблице Житель с отображением в комбо реальных названий городов и областей (это у меня получилось до использования предложеного вами кода :) т к у меня отображались все названия городов и областей)
2. Придобалении записи в тбл Житель - можно было выбрать из сомбо название области, затем в другом комбике были только те города принадлеж этой обл. (ваш код мне ясен тут его и применяю)
НО проблема возникла с навигацией (1 пункт)
Если не меняется название области, а я бегаю по записям Житель (навигация тбл Житель), то название города не будет менятся и мне пришлось постоянно при навигации (а это кнопки >, >>, <,<<) использовать функцию
cbCITY.DataBindings.Clear ();
DataView dv2 = new DataView(dataSet1.Table["REGION"]);
dv2.RowFilter = "IDOBL = " + cbREGION.SelectedValue.ToString();
cbCITY.DataSource =dv2;
cbCITY.ValueMember = "ID_CITY";
cbCITY.DisplayMember = "NAME_CITY";
Binding binding = new Binding("SelectedValue",dataSet1, "Житель.IDOBL");
cbCITY.DataBindings.Add(binding);
где cbREGION - это для отображения областей
cbCITY - для городов
:)
winsky!
Дата: 19.05.2006 15:38:43
т.е. вы хотите и удобно "бегать" и удобно добавлять в одном месте...
по идее, вам нужно разделить два этих процесса - просмотр и добавление, т.е. во время просмотра у вас в комбах данные просто меняются в зависимости от жителя а в момент добавления включается ограничение на выбор городов - ключевой момент - определить, когда добавляется новый житель