Основы ASP.NET 2.0



         

Программное управление TreeView - часть 2


protected SqlDataReader CreateSqlDataReader(string SelectQuery, string ConnectionString) { SqlConnection Connection = new SqlConnection(ConnectionString); SqlCommand Command = new SqlCommand(SelectQuery, Connection); try { Command.CommandType = CommandType.Text; Command.Connection.Open(); SqlDataReader reader = Command.ExecuteReader(CommandBehavior.CloseConnection); return reader; } catch { Connection.Close(); return null; } }

При работе с базами данных важно перехватывать исключения:

protected void BindData() { TreeNode parentNode = null; SqlDataReader reader = CreateSqlDataReader("Select CategoryID,CategoryName from Categories", connectionString); if (reader!=null) { while (reader.Read()) { parentNode = new TreeNode(reader["CategoryName"].ToString(), reader["CategoryID"].ToString()); parentNode.Collapse(); parentNode.PopulateOnDemand = true; parentNode.SelectAction = TreeNodeSelectAction.Expand; TreeViewCatProd.Nodes.Add(parentNode); } reader.Close(); } }

Конструктор TreeNode может вызываться без параметров, но он перегружен. Вариант, который здесь используется, позволяет задать текст узла и значение Value (заполняется значением CategoryID), которое необходимо, чтобы найти в базе продукты этой категории.

При раскрытии узла с категорией будет вызываться обработчик:

protected void TreeViewCatProd_TreeNodePopulate(object sender, TreeNodeEventArgs e) { TreeNode node = e.Node; if (node.PopulateOnDemand) { string command = string.Format("Select ProductID, ProductName from Products where CategoryID={0}", node.Value); SqlDataReader reader = CreateSqlDataReader(command, connectionString); node.ChildNodes.Clear(); if (reader != null) { while (reader.Read()) { TreeNode childNode = new TreeNode(reader["ProductName"].ToString()); childNode.SelectAction = TreeNodeSelectAction.None; node.ChildNodes.Add(childNode); } node.Expand(); reader.Close(); } } }




Содержание  Назад  Вперед