【发布时间】:2015-08-17 06:52:51
【问题描述】:
我正在从 MySQL 数据库中填写我的 TreeView。所以我没有为他们每个人上课。我使用HierarchicalDataTemplates 来构造TreeView,我有三个级别。我想过滤比较包含的TextBlock 的文本和用户输入的第一级。如何在不使用ObservableCollection 的情况下进行过滤? (我尝试使用ICollectionView,但失败了。)
Source = CollectionViewSource.GetDefaultView(FileTreeView.ItemsSource);
this.Source.Filter = item =>
{
TreeViewItem vitem = item as TreeViewItem;
if (vitem == null) return false;
foreach (object items in vitem.Items)
{
vitem.ApplyTemplate();
TreeViewItem firstlevel = vitem.ItemContainerGenerator.ContainerFromItem(item) as TreeViewItem;
UIElement element = GetChildControl(firstlevel, "fem_title");
if (element != null)
{
TextBlock txt = (TextBlock)element;
return (txt.Text.Contains(title.SelectedValue.ToString()));
}
}
return false;
它抛出一个“NotSupportedException”。
我如何填充 TreeView:
private DataSet FillDataGrid()
{
try
{
MySqlConnection con = new MySqlConnection();
con.ConnectionString = ConString;
con.Open();
MySqlDataAdapter femda = new MySqlDataAdapter("SELECT * FROM fem_table", con);
MySqlDataAdapter versionda = new MySqlDataAdapter("SELECT * FROM version_table", con);
MySqlDataAdapter fileda = new MySqlDataAdapter("SELECT * FROM file_table", con);
DataSet ds = new DataSet();
femda.Fill(ds, "fem_table");
versionda.Fill(ds, "version_table");
fileda.Fill(ds, "file_table");
DataRelation dr = new DataRelation("DataRelationship_fem_version",
ds.Tables["fem_table"].Columns["fem_guid"],
ds.Tables["version_table"].Columns["fem_table_fem_guid"],
true);
DataRelation dr2 = new DataRelation("DataRelationship_version_file",
ds.Tables["version_table"].Columns["version_id"],
ds.Tables["file_table"].Columns["version_table_version_id"],
true);
dr.Nested = true;
ds.Relations.Add(dr);
ds.Relations.Add(dr2);
return ds;
}
catch (Exception ex)
{ throw new Exception(ex.Message); }
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.FileTreeView.DataContext = FillDataGrid();
}
【问题讨论】:
-
请提供代码示例,并尝试使用
ICollectionView。 -
我编辑提供了我如何尝试使用 ICollectionView 的代码
-
谢谢,我认为这并不清楚。能否请您在
TreeViewItem vitem = item as TreeViewItem;行设置断点并告诉我项目的类型是什么? -
我认为过滤方法有问题。它给出错误“不支持指定的方法。”。所以它说“当前内容中不存在该项目”。
标签: c# wpf treeview hierarchicaldatatemplate