Программное управление TreeView
В следующем примере заполним значения элемента управления TreeView из базы данных Northwind. Родительские узлы — категории продуктов, которые заполняются данными о продуктах тогда, когда узел необходимо раскрыть. Флажки стоят у родительских узлов, потому что именно там находятся названия блюд. В обработчике можно динамически показывать сумму текущего заказа. Вспомогательная функция устанавливает… Читать ещё >
Программное управление TreeView (реферат, курсовая, диплом, контрольная)
У TreeView есть множество событий. Событие SelectedNodeChanged запускается, когда пользователь выбирает узел.
protected void TreeLibrary_SelectedNodeChanged (object sender, EventArgs e).
{.
Label1.Text = «Вы выбрали категорию «+ TreeLibrary.SelectedNode.Text;
}.
Можно программно раскрывать и закрывать узлы.
TreeView1.ExpandAll ();
TreeView1.CollapseAll ();
Событие TreeNodePopulate позволяет динамически заполнять узлы, при этом можно экономить память, если заполнять узлы только по требованию после расрытия родительского узла. Событие TreeNodePopulate вызывается, если действие (например, раскрытие) проведено с узлом, у которого SelectAction настроен на это действие.
В следующем примере заполним значения элемента управления TreeView из базы данных Northwind. Родительские узлы — категории продуктов, которые заполняются данными о продуктах тогда, когда узел необходимо раскрыть.
OnTreeNodePopulate="TreeViewCatProd_TreeNodePopulate" ForeColor="DarkOliveGreen" >
public partial class Products: System.Web.UI.Page.
{.
string connectionString = @" Data Source=.SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True" ;
protected void Page_Load (object sender, EventArgs e).
{.
if (!Page.IsPostBack).
{.
BindData ();
}.
}.
Вспомогательная функция устанавливает соединение с базой данных и возвращает SqlDataReader — самый быстрый способ чтения данных.
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 ();
}.
}.
}.
TreeView позволяет не только показывать информацию, но ставить флажки рядом с узлами. Это полезно, если в нем содержится информация о товарах, при этом пользователь может выбрать некоторые из них. Свойство ShowCheckBoxes допускает 5 значений: None, Root, Parent, Leaf, All.
ShowCheckBoxes="Leaf" .
При этом рядом с узлами-листьями появляются флажки. Значение флажков можно прочитать программно.
Font-Names="Verdana" Font-Size="0.8em" ForeColor="#990 000″ Height="78px" .
Width="415px" ShowCheckBoxes="Parent" OnTreeNodeCheckChanged="TreeMenu_TreeNodeCheckChanged" .
NodeWrap="True" PopulateNodesFromClient="False" >
Флажки стоят у родительских узлов, потому что именно там находятся названия блюд. В обработчике можно динамически показывать сумму текущего заказа.
protected void TreeMenu_TreeNodeCheckChanged (object sender, TreeNodeEventArgs e).
{.
decimal sumPrices=0.0M;
if (TreeMenu.CheckedNodes.Count > 0).
{.
Label1.Text = «» ;
foreach (TreeNode node in TreeMenu. CheckedNodes).
{.
sumPrices += decimal. Parse (node.ChildNodes[0]. Value);
}.
Label1.Text = sumPrices. ToString () +" «;
}.
}.
Цена записана в первом дочернем поле с индексом 0. При этом обращаться свойство Text было бы неправильно, потому что там находится отформатированный текст, например «306 руб.», который нельзя преобразовать в число.