DataBind к конкретным записям - PullRequest
0 голосов
/ 20 января 2009

У меня есть DataGridView, привязанный к этой таблице:

[Users]
ID Name
-- ----
11 Qwe
22 Asd

Сетка напрямую связана с таблицей типизированных наборов данных.

У меня есть вторая таблица, подобная этой:

[Records]
ID  UserID  Data
--  ------  ----
67  11      ....
68  11      ....

Records.UserID подключен к Пользователям с внешним ключом.

Я хочу сделать следующее: когда пользователь дважды щелкает пользователя # 11, я открываю новую сетку, привязанную к таблице [Записи], но привязываем только к строкам, где UserID = 11. Двойной щелчок, получение идентификатора, новая сетка и т. ХОРОШО. У меня не было бы никаких проблем, если бы я делал это, связанное со sprocs, но я хочу, чтобы это было связано, и я просто понятия не имею, как это сделать.

Не могли бы вы дать мне какие-нибудь идеи?

Ответы [ 2 ]

1 голос
/ 20 января 2009

Если вы используете DataSets / DataTables, то вы можете сделать что-то вроде этого, чтобы отфильтровать строки для второй сетки:

string filter = String.Format("UserID = {0}", selectedUserId);
grdRecords.DataSource = ds.Tables["Records"].Select(filter);

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

Конечно, есть и другие способы сделать это. Если вы используете объекты, которые являются производными от IBindingListView, такие как экземпляры класса DataView, у вас должен быть доступ к свойству Filter. Тогда вы можете просто сделать это:

string filter = String.Format("UserID = {0}", selectedUserId);
DataView myView;
grdRecords.DataSource = myView;
myView.Filter = filter;

И ваше представление останется фильтрованным, чтобы соответствовать любым данным, которые вы помещаете в него.

Надеюсь, этот пост достаточно ясен для того, чтобы вы могли разобраться в деталях ... Сегодня я немного расстроен. :)

0 голосов
/ 05 февраля 2009

В итоге мне пришлось вот что:

  1. Создать класс БД с открытым свойством (MyDataSetProperty), которое возвращает typedDataset

  2. Создание пользовательской функции Fill в наборе данных, которая принимает параметр Id.

  3. Используйте эту функцию для заполнения таблицы в приватном typedDataset

    this.myTableAdapter.FillCustom (this.myTypedDataset.MyTable, this.Id);

  4. Привязать привязку Source к этому общедоступному свойству:

    this.bindingSource.DataSource = this.db.MyDataSetProperty;

...