Avatar billede simsen Mester
18. juli 2008 - 10:45 Der er 5 kommentarer og
1 løsning

Ved klik på TreeView indenfor samme gruppe

Hej,

Jeg har følgende menustruktur i mit TreeView

Forside
Om os
Test
..Test2
..Test3

Alt fungerer som sådan fint. Når jeg klikker på Test, expander den Test2 og Test3.

Nu klikker jeg så på Test2 og den viser mig fint Test2's indhold.
Jeg klikker derefter på Test3 og den viser mig Test3's indhold.

NU kommer så problemet;
Forsøger jeg herefter at klikke på Test2 eller Test, så bliver den ved med at vise mig Test3's indhold...... Jeg SKAL op i f.eks. Om os og derefter vælge Test eller Test2 for at den vil vise mig det korrekte indhold.......

Jeg har forsøgt mig med "Run to curser" og den kører fint igennem MenuTree_TreeNodeExpanded indtil jeg kommer til at ville vælge Test2 punktet efter jeg har valgt Test3, så kører den ikke igennem den metode længere.......

Hvilken metode bruger den så???

Min kode:

public partial class Admin_Frontpage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //Henter menu
            GetMenu();
        }

        this.NodeFound += new EventHandler<Admin_Frontpage.NodeFoundEvent>(Admin_Frontpage_NodeFound);
    }

    private void GetMenu()
    {
        //16-06-2008 AS
        //Get the top menu
        try
        {
            DALMenu menu = new DALMenu();
            if (menu.EditGetTopMenu(MenuTree) == Status.Success)
            {
                //Henter submenus
                for (int i = 0; i < MenuTree.Nodes.Count; i++)
                {
                    TreeNode headnode = MenuTree.Nodes[i];

                    GetSubNodes(headnode);

                    foreach (TreeNode node in MenuTree.Nodes[i].ChildNodes)
                    {
                        GetSubNodes(node);
                    }
                }
                if (lblMenuId.Text == "" || lblMenuId.Text == "0")
                {               
                    lblMenuId.Text = "0";
                }
            }
        }
        catch
        { }
    }

    void Admin_Frontpage_NodeFound(object sender, Admin_Frontpage.NodeFoundEvent e)
    {
        lblMenuId.Text = e.node.Value;
        lblMenuName.Text = e.node.Text;
    }

    protected void MenuTree_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
    {

        try
        {
            int key_id = Convert.ToInt32(e.Node.Value);

            lblMenuId.Text = key_id.ToString();
            lblMenuName.Text = Convert.ToString(e.Node.Text);

            if (e.Node.Depth == 0)
            {
                TreeView t = (TreeView)sender;

                for (int i = 0; i < t.Nodes.Count; i++)
                {
                    if (t.Nodes[i] != e.Node)
                    {
                        t.Nodes[i].CollapseAll();
                    }
                }
            }
        }
        catch
        {
        }
    }

    protected void MenuTree_TreeNodeCollapsed(object sender, TreeNodeEventArgs e)
    {
        try
        {
            int key_id = Convert.ToInt32(e.Node.Value);

            lblMenuId.Text = key_id.ToString();
            lblMenuName.Text = Convert.ToString(e.Node.Text);
        }
        catch
        {
        }
    }

    private static void GetSubNodes(TreeNode node)
    {
        DALMenu submenu = new DALMenu();
        submenu.EditGetSubMenu(node);
    }


    public void FindAndSelect(TreeView TV, string SearchText)
    {
        TV.CollapseAll();

        foreach (TreeNode node in TV.Nodes)
        {
            FindNode(node, SearchText);
        }
    }

    public class NodeFoundEvent : EventArgs
    {
        TreeNode _node;
        public TreeNode node
        {
            get { return _node; }
            set { _node = value; }
        }
    }
    public event EventHandler<NodeFoundEvent> NodeFound;

    public void FindNode(TreeNode node, string SearchText)
    {
        if (node.Text == SearchText)
        {
            node.Select();
            ExpandUpwards(node);
            NodeFoundEvent evt = new NodeFoundEvent();
            evt.node = node;
            NodeFound(this, evt);
        }
        else
            foreach (TreeNode sub in node.ChildNodes)
            {
                FindNode(sub, SearchText);
            }
    }

    public void ExpandUpwards(TreeNode node)
    {
        node.Expand();

        if (node.Parent != null)
            ExpandUpwards(node.Parent);
    }
}

mvh
simsen :-)
Avatar billede montago Praktikant
18. juli 2008 - 12:55 #1
men klikker du på noden... eller søger du efter den med den metode jeg lavede til dig ?

jeg synes ikke jeg kan se din ???_SelectedNodeChange(object sender, event..) metode ?
Avatar billede montago Praktikant
18. juli 2008 - 12:58 #2
prøv at skrive

MenuTree.SelectedNodeChange += <tryk tab 2 gange>

herved vil du få det event, hvormed du Selecter noden...
(husk at selectedNodeChange eventet kun sker imellem 2 forskellige noder, og ikke den samme)
Avatar billede simsen Mester
21. juli 2008 - 08:28 #3
Hejsa montago,

Undskyld jeg først reagerer nu, men har været nede med influensa.....

Jeg har et lille problem med SelectedNodeChange....

Det jeg nemlig behøver er value for den der er valgt, men den kan jeg ligesom ikke få fat på.

Jeg forsøger sådan her:

void MenuTree_SelectedNodeChanged(object sender, EventArgs e)
    {
        int key_id = Convert.ToInt32(e.node.Value);

        lblMenuId.Text = key_id.ToString();
    }

Men får så at vide at EventArgs ikke indeholder en definition for node..... Hvordan finder jeg så value for den valgte node frem?
Avatar billede simsen Mester
21. juli 2008 - 09:01 #4
Glem det jeg har skrevet ovenfor - jeg fandt ud af, hvordan jeg hentede selected value.... Men den vil stadig ikke ændre indholdet. Min SelectedNodeChanged ser ud som følgende:

protected void MenuTree_SelectedNodeChanged(object sender, EventArgs e)
    {
        TreeNode selectedNode = MenuTree.SelectedNode;
        int key_id = Convert.ToInt32(selectedNode.Value);

        lblMenuId.Text = key_id.ToString();
    }
Avatar billede simsen Mester
21. juli 2008 - 11:42 #5
Hmmmmmmmm - aner ikke hvad der er gået galt - men den test side jeg har haft, har haft en eller anden fejl, forsøgte med den side, hvor jeg har sat det hele ind og den fungerer altså.........

Smid et svar og tak for hjælpen :-)
Avatar billede montago Praktikant
21. juli 2008 - 17:05 #6
hehe... der kan man bare se :-)

men du skal gøre sådan her:

protected void MenuTree_SelectedNodeChanged(object sender, EventArgs e)
{
    TreeNode selectedNode = ((TreeView)sender).SelectedNode; //<---
    int key_id = Convert.ToInt32(selectedNode.Value);

    lblMenuId.Text = key_id.ToString();
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester