我是 WPF 的新手,特别是它的数据绑定。
我有一个具有递归结构的表。表结构如下图所示:
ID (int, not null) As PK,
Text (nvarchar),
ParentID (int)
我在表单上有两个组合,第一个组合填充了以下查询返回的项目:
Select * from tbl where ParentID = null
在此组合中选择一个项目会导致加载表中 ParentID 等于所选项目 ID 的每一行。以下查询返回填充第二个组合的项目:
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 与主表的 ID 关联起来:
ds.Relations.Add(
"Rel_ID_ParentID",
ds.Tables["tbl"].Columns["ID"],
ds.Tables["Child_tbl"].Columns["ParentID"]);
最后,我将这个 istance 的 DataContext 设置为数据源
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"/>
但是第二个组合框没有填充任何数据。有任何想法吗?