ASP.NET Treeview с использованием PopulateOnDemand и флажков не работает по мере необходимости
Я использую элемент управления Treeview на веб-странице. На самом низком уровне находится более 1900 узлов, поэтому я пытаюсь использовать PopulateOnDemand. Это хорошо работает до тех пор, пока я не захочу найти все узлы, которые выбрал пользователь.
Когда любой из узлов, которые изначально заполнены, проверяются, они включаются в свойство CheckedNodes Treeview, когда я нажимаю кнопку упорядочить выбранные разделы.
Если я перехожу на уровень, который изначально не заполнен, выполняется tvDocList_TreeNodePopulate, и узел заполняется правильной информацией. Если я сейчас поставлю галочку рядом с одним из вновь заполненных узлов и нажму кнопку заказать выбранные разделы, то CheckedNodes не будет содержать ни одного из узлов, которые были заполнены по требованию.
Я попытался получить проверенные узлы с помощью TreeNodeCheckChanged, но единственные узлы, которые проходят через них, - это те, которые изначально загружены. Любые из них, загруженные по требованию, игнорируются.
Есть предложения?
Заранее спасибо.
Вот код, который я использую.
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ShoppingCart._Default" %> <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> <h2> Welcome to Great River Printing! </h2> <asp:Table ID="Table1" runat="server" Width="100%"> <asp:TableRow runat="server"> <asp:TableCell runat="server"> <asp:Button ID="btnOrderSelected" runat="server" Text="Order Selected Sections" /> <asp:TreeView ID="tvDocList" runat="server" Width="316px" ShowCheckBoxes="All"> <nodes> <asp:TreeNode ShowCheckBox="True" Text="Great River" Value="Great River"> </nodes>
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { LoadPage(); } btnOrderSelected.Click += new EventHandler(btnOrderSelected_Click); tvDocList.TreeNodePopulate += new TreeNodeEventHandler(tvDocList_TreeNodePopulate); tvDocList.TreeNodeCheckChanged += new TreeNodeEventHandler(tvDocList_TreeNodeCheckChanged); } protected void LoadPage() { tvDocList.Nodes.Clear(); tvDocList.ExpandDepth = 3; foreach (PageProject project in MySession.Current.Projects) { TreeNodeData node = project.AddToTree(null); node.AddToTree(tvDocList.Nodes); } } private void btnOrderSelected_Click(object sender, EventArgs e) { List<int> checkedIds = new List<int>(); int id; foreach (TreeNode tn in tvDocList.CheckedNodes) { if (int.TryParse(tn.Value, out id)) checkedIds.Add(id); } } void tvDocList_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e) { PageSection p = GetPageSection(e); } void tvDocList_TreeNodePopulate(object sender, TreeNodeEventArgs e) { PageSection pageSection = GetPageSection(e); if (pageSection != null) { TreeNodeData tnd = pageSection.AddToTree(null); tnd.AddChildrenToTree(e.Node); } } private PageSection GetPageSection(TreeNodeEventArgs e) { PageSection pageSection = null; int id; if (int.TryParse(e.Node.Value, out id)) { foreach (PageProject project in MySession.Current.Projects) { pageSection = project.FindPageSection(id); if (pageSection != null) { pageSection.Selected = e.Node.Checked; break; } } } return pageSection; } } </int></int>