Заказать курсовые, контрольные, рефераты...
Образовательные работы на заказ. Недорого!

Программное управление 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 руб.», который нельзя преобразовать в число.

Показать весь текст
Заполнить форму текущей работой