You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击TreePanel节点触发功能实现问题(Ext.Net2.5+VS2010+C#)

Fixing TreePanel Node Click to Load Corresponding Articles in Ext.NET 2.5

Hey there! Let's sort out this issue where clicking your TreePanel category nodes isn't loading the right articles into your GridPanel. The key thing to note here is that Ext.NET 2.5's TreePanel doesn't use WinForms-style TreeNodeMouseClickEventArgs—it relies on its own web-focused event model, which is why that approach wasn't working for you.

Here's a step-by-step solution tailored to your stack (VS2010, Ext.NET 2.5, C#):

1. Configure the TreePanel for Node Click Events

First, set up your TreePanel to fire a server-side event when a node is clicked, passing the category ID as a parameter. Update your ASPX markup like this:

<ext:TreePanel ID="TreePanelCategories" runat="server" Title="分类" AutoScroll="true">
    <!-- Bind server-side node click event -->
    <DirectEvents>
        <NodeClick OnEvent="TreePanelCategories_NodeClick">
            <ExtraParams>
                <!-- Pass the clicked node's ID (your category ID) -->
                <ext:Parameter Name="categoryId" Value="node.getId()" Mode="Raw" />
            </ExtraParams>
        </NodeClick>
    </DirectEvents>
</ext:TreePanel>

2. Ensure Tree Nodes Have Correct Category IDs

When loading your category data into the TreePanel, make sure each node's Id property is set to your database category ID. Here's an example of how to do this in C#:

protected void Page_Load(object sender, EventArgs e)
{
    if (!X.IsAjaxRequest)
    {
        LoadTreeCategories();
    }
}

private void LoadTreeCategories()
{
    // Fetch category data from your database
    var categories = GetCategoriesFromDatabase();
    
    foreach (var category in categories)
    {
        Node categoryNode = new Node
        {
            Text = category.Name,
            Id = category.Id.ToString() // Critical: Assign category ID to node's Id
        };
        TreePanelCategories.Root[0].Nodes.Add(categoryNode);
    }
}

// Replace with your actual database query logic
private List<Category> GetCategoriesFromDatabase()
{
    return new List<Category>
    {
        new Category { Id = 1, Name = "Tech Blogs" },
        new Category { Id = 2, Name = "Life Essays" }
    };
}

3. Handle the Node Click Server-Side to Load Articles

Now create the server-side event handler that fetches articles by the clicked category ID and binds them to the GridPanel:

protected void TreePanelCategories_NodeClick(object sender, DirectEventArgs e)
{
    // Get the passed category ID
    string categoryId = e.ExtraParams["categoryId"];
    
    if (!string.IsNullOrEmpty(categoryId))
    {
        // Fetch articles matching the category ID
        var articles = GetArticlesByCategoryId(categoryId);
        
        // Bind data to the GridPanel's store
        GridPanelArticles.GetStore().DataSource = articles;
        GridPanelArticles.GetStore().DataBind();
    }
}

// Replace with your actual database query logic
private List<Article> GetArticlesByCategoryId(string categoryId)
{
    return new List<Article>
    {
        new Article { Id = 101, Title = "Ext.NET Beginner's Guide", CategoryId = int.Parse(categoryId) },
        new Article { Id = 102, Title = "C# Async Programming Tips", CategoryId = int.Parse(categoryId) }
    };
}

Why TreeNodeMouseClickEventArgs Didn't Work

Just to clarify: TreeNodeMouseClickEventArgs is part of the WinForms TreeView control, not Ext.NET's web-based TreePanel. Ext.NET uses its own event system built on top of ASP.NET AJAX, so that class won't be available or relevant here.

Alternative: Use DirectMethod for Client-Side to Server-Side Calls

If you prefer a more client-centric approach, you can use Ext.NET's DirectMethod to call a server method directly from client-side JavaScript:

Client-Side Listener in TreePanel:

<ext:TreePanel ID="TreePanelCategories" runat="server" Title="分类">
    <Listeners>
        <NodeClick Handler="loadArticlesForCategory(node.getId());" />
    </Listeners>
</ext:TreePanel>

<script type="text/javascript">
    function loadArticlesForCategory(categoryId) {
        // Call server-side DirectMethod
        Ext.net.DirectMethods.LoadArticles(categoryId, {
            success: function(articles) {
                // Load returned articles into GridPanel's store
                var store = Ext.getCmp('GridPanelArticles').getStore();
                store.loadData(articles);
            }
        });
    }
</script>

Server-Side DirectMethod:

[DirectMethod]
public List<Article> LoadArticles(string categoryId)
{
    // Same article query logic as before
    return GetArticlesByCategoryId(categoryId);
}

Quick Checks to Ensure It Works

  • Double-check that your TreePanel nodes have the correct category ID assigned to their Id property.
  • Verify that your GridPanel's Store is configured with matching fields for your Article model.
  • Make sure you're not missing any required Ext.NET assemblies or script resources in your project.

内容的提问来源于stack exchange,提问作者Eric Weichhart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:44:43