Мастер Деталей Комбинации в WPF - PullRequest
0 голосов
/ 08 января 2012

Я новичок в WPF и, особенно, его привязка данных.

У меня есть таблица с рекурсивной структурой. Структура таблицы показана ниже:

ID (int, not null) As PK,
Text (nvarchar),
ParentID (int) 

У меня есть две комбинации на форме, первая комбинация заполнена элементами, возвращаемыми следующим запросом:

Select * from tbl where ParentID = null

Выбор элемента в этом комбо вызывает загрузку каждой строки в таблице, у которой ParentID равен идентификатору выбранного элемента. Следующий запрос возвращает элементы, которые заполняют второе комбо:

Select * from tbl where ParentID = Selected_ID_form_Combo1

Мое решение для этой проблемы (если это вообще может быть решением!):

Я загружаю данные в набор данных по следующим запросам, но в две разные таблицы данных:

SqlConnection cnn = new SqlConnection(ConnectionString);

DataSet ds = new DataSet();
SqlCommand cmd = new SqlCommand("Select * from tbl where ParentID is NULL", cnn);
SqlCommand cmd1 = new SqlCommand("Select * from tbl where ParentID != 0", cnn);
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);
SqlDataAdapter da1 = new SqlDataAdapter(cmd1);

da.Fill(ds, "tbl");
da1.Fill(ds, "Child_tbl");

Затем я делаю представление, чтобы связать TargetID дочерней таблицы с идентификатором основной таблицы:

ds.Relations.Add(
"Rel_ID_ParentID",
ds.Tables["tbl"].Columns["ID"],
ds.Tables["Child_tbl"].Columns["ParentID"]);

Наконец, я установил DataContext этого istance для источника данных

this.DataContext = ds;

В коде XAML две комбинации определены следующим образом:

<ComboBox Name="cmbMain" ItemsSource="{Binding}"
   DataContext="{Binding Path=Tables[tbl]}" DisplayMemberPath="Text"
   SelectedValuePath="ID" />

<ComboBox Name="cmbChild" ItemsSource="{Binding Path=Rel_ID_ParentID}"
   DisplayMemberPath="Text" SelectedValue="ID" SelectedValuePath="TargetID"
   IsSynchronizedWithCurrentItem="True"/>

Но второй выпадающий список не заполнен какими-либо данными. Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...