如何将数据从数据库绑定到树视图



我的目标很简单。我在数据表中有数据,其中包含 5 个表。在我的树视图中,我必须将表名称绑定为节点,将列名称绑定为特定节点(表名称(的子节点。我在VS2015中使用C#语言。我正在使用 WAF 架构。

这是我到目前为止尝试的:

视图:-

<TreeView x:Name="treeQueryBuilder"  ItemsSource="{Binding dictTree.Keys}">                         
            <TreeView.ItemTemplate >
            <HierarchicalDataTemplate >
                <TextBlock FontWeight="Bold" Text="{Binding }"/>
                <HierarchicalDataTemplate.ItemTemplate  >
                    <DataTemplate >
                        <TextBlock Text="{Binding}" Width="100"/>
                    </DataTemplate>
                </HierarchicalDataTemplate.ItemTemplate>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
</TreeView>

视图模型:-

public Dictionary<string, List<string>> dictTree
        {
            get
            {
                if (_TreeNode == null)
                    _TreeNode = new Dictionary<string, List<string>>();
                    return _TreeNode;
            }
            set { SetProperty(ref _TreeNode, value); }
        }
  public List<string> ChildNodes
        {
            get
            {
                if (_ChildNodes == null)
                    _ChildNodes = new List<string>();
                return _ChildNodes;
            }
            set { SetProperty(ref _ChildNodes, value); }
        }

控制器:-

private void PopulateDBTables()
        {
            try
            {
                DBConnect.ConnectToOracleDB(false);
                Table_Query = "SELECT TABLE_NAME FROM DBA_TABLES WHERE OWNER='DataBase' ORDER BY TABLE_NAME";
                Obj_QueryBuilderViewModel.dtgrdTableData = DBConnect.RetrieveFromTable(Table_Query);
                foreach (DataRow TableName in Obj_QueryBuilderViewModel.dtgrdTableData.Rows)
                {
                    Obj_QueryBuilderViewModel.ParentNode = new TreeNode(TableName[0].ToString());
                    Obj_QueryBuilderViewModel.dictTree.Add(Obj_QueryBuilderViewModel.ParentNode.Text, ADDCHILDNODES(TableName[0].ToString(),Obj_QueryBuilderViewModel.ParentNode));
                }
            }
            catch (Exception EX)
            {
                App.DisplayMessage(EX.Message);
            }
        }

        private List<string> ADDCHILDNODES(string Table_Name, TreeNode parentNode)
        {
            try
            {
                DBConnect.ConnectToOracleDB(false);
                Column_Query = "select column_name from dba_tab_cols where owner='EDS' and table_name='" + Table_Name + "'order by column_name";
                dt_Columns = DBConnect.RetrieveFromTable(Column_Query);
                if (Obj_QueryBuilderViewModel.ChildNodes.Count > 0)
                {
                    Obj_QueryBuilderViewModel.ChildNodes = null;
                }
                foreach (DataRow Column_Name in dt_Columns.Rows)
                {
                    Obj_QueryBuilderViewModel.ChildNode = new TreeNode(Column_Name[0].ToString());
                    Obj_QueryBuilderViewModel.ChildNodes.Add(Obj_QueryBuilderViewModel.ChildNode.Text);
                }
            }
            catch (Exception EX)
            {
            }
            return Obj_QueryBuilderViewModel.ChildNodes;
        }

这里Obj_QueryBuilderViewModel是ViewModel的对象。

使用上面的代码时,我只能绑定树视图中的父节点,而不能绑定子元素。

最后,这就是我发现的。

<TreeView x:Name="treeQueryBuilder"  ItemsSource="{Binding DictClass}">                         
            <TreeView.ItemTemplate >
            <HierarchicalDataTemplate Itemsource="{Binding Columnnames}" >
                <TextBlock FontWeight="Bold" Text="{Binding Tablenames }"/>
                <HierarchicalDataTemplate.ItemTemplate  >
                    <DataTemplate >
                        <TextBlock Text="{Binding}" Width="100"/>
                    </DataTemplate>
                </HierarchicalDataTemplate.ItemTemplate>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
</TreeView>

我在其中参加了一个类,并在其中编写了该类的属性

 public Class DictClass
    {
    public string Tablenames{get;set;}//as Parentnodes
    public list<string> Columnnames{get;set;}//as Childnodes
    }

最新更新