This is a migrated thread and some comments may be shown as answers.

Panelbar has button that requires to clicks

2 Answers 116 Views
PanelBar
This is a migrated thread and some comments may be shown as answers.
Jiro Feingold
Top achievements
Rank 1
Jiro Feingold asked on 13 Jan 2009, 07:30 PM
I'm using the panelbar, and allow for a choice between two different views (which change the contents in the panelbar).

Changing the view recreates the panelbar, but the buttons in it now require two clicks.(complete_Click only gets called on the second click.).  To reproduce, set a breakpoint at complete_Click run the code, click on the "COMPLETE" button, verify that the breakpoint is hit with one click.  They click on the top "Completed courses", view the "new" panelbar, try clicking on "COMPLETE" and see it require two clicks to hit the breakpoint.

My test.aspx code:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
</head>
<body>
    <form id="form1" runat="server">
    <div>
            <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
            <telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server">        
                 <asp:Button ID="newcourses" runat="server" Text="New Courses" onclick="newcourses_Click" />
                 <asp:Button ID="completedcourses" runat="server" Text="Completed Courses" onclick="completedcourses_Click" />
                 <asp:PlaceHolder ID="courseplaceholder" runat="server"></asp:PlaceHolder>
            </telerik:RadAjaxPanel>
    </div>
    </form>
</body>
</html>

My test.aspx.cs code

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Telerik.Web.UI;
using System.Data.SqlClient;

public partial class test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["current"] == null)
        {
            Session["current"] = "True";
        }
        createPanelBar();  
    }

    void createPanelBar()
    {
        courseplaceholder.Controls.Clear();

        RadPanelBar coursepanels = new RadPanelBar();
        coursepanels.ExpandMode = PanelBarExpandMode.SingleExpandedItem;
        coursepanels.Skin = "Telerik";

        RadPanelItem panelItem;
        RadPanelItem panelSubItem;
        TextBoxTemplate template;

        panelItem = new RadPanelItem();
        panelItem.Expanded = true;

        panelItem.Text = "Grouping";
        panelItem.ExpandedCssClass = "ExpandedCssClass";

        panelSubItem = new RadPanelItem();
        template = new TextBoxTemplate();

        Literal text = new Literal();
        if (Session["current"].ToString() == "True" )
        {
            text.Text = "Course to be taken ";
        }
        else
        {
            text.Text = "Already taken course ";
        }
        panelSubItem.Controls.Add(text);
        Button button = new Button();
        button.Text = "COMPLETE";
        button.ID = "complete1";
        button.Click += new EventHandler(complete_Click);
        panelSubItem.Controls.Add(button);
        template.InstantiateIn(panelSubItem);
        panelItem.Items.Add(panelSubItem);

        coursepanels.Items.Add(panelItem);
                
        courseplaceholder.Controls.Add(coursepanels);

    }

    protected void newcourses_Click(object sender, EventArgs e)
    {
        Session["current"] = true;
        createPanelBar();

    }

    protected void completedcourses_Click(object sender, EventArgs e)
    {
        Session["current"] = false;
        createPanelBar();
    }

    void complete_Click(object sender, EventArgs e)
    {
    }


    class TextBoxTemplate : ITemplate
    {
        public void InstantiateIn(Control container)
        {
        }
    }
}






2 Answers, 1 is accepted

Sort by
0
Paul
Telerik team
answered on 19 Jan 2009, 03:02 PM
Hi Jiro,

Please find below your modified code snippet that works as expected.

using System; 
using System.Configuration; 
using System.Data; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 
using Telerik.Web.UI; 
using System.Data.SqlClient; 
 
public partial class _Default : System.Web.UI.Page 
    protected void Page_Load(object sender, EventArgs e) 
    { 
        if (Session["current"] == null
        { 
            Session["current"] = "True"
        } 
        createPanelBar(); 
    } 
 
    void createPanelBar() 
    { 
        courseplaceholder.Controls.Clear(); 
 
        RadPanelBar coursepanels = new RadPanelBar(); 
        coursepanels.ID = "RadPanelBar1"
        coursepanels.ExpandMode = PanelBarExpandMode.SingleExpandedItem; 
        coursepanels.Skin = "Telerik"
 
        RadPanelItem panelItem; 
        RadPanelItem panelSubItem; 
        TextBoxTemplate template; 
 
        panelItem = new RadPanelItem(); 
        panelItem.Expanded = true
 
        panelItem.Text = "Grouping"
        panelItem.ExpandedCssClass = "ExpandedCssClass"
 
        panelSubItem = new RadPanelItem(); 
        panelSubItem.Value = "templateHolder"
        template = new TextBoxTemplate(); 
 
        Literal text = new Literal(); 
        text.ID = "myLiteral1"
        if (Session["current"].ToString() == "True"
        { 
            text.Text = "Course to be taken "
        } 
        else 
        { 
            text.Text = "Already taken course "
        } 
        panelSubItem.Controls.Add(text); 
 
        Button button = new Button(); 
        button.Text = "COMPLETE"
        button.ID = "complete1"
        button.Click += new EventHandler(complete_Click); 
        panelSubItem.Controls.Add(button); 
        template.InstantiateIn(panelSubItem); 
        panelItem.Items.Add(panelSubItem); 
 
        coursepanels.Items.Add(panelItem); 
 
        courseplaceholder.Controls.Add(coursepanels); 
 
    } 
 
    protected void newcourses_Click(object sender, EventArgs e) 
    { 
        RadPanelBar panelbar = (RadPanelBar)courseplaceholder.FindControl("RadPanelBar1"); 
        Literal myLit = (Literal)panelbar.FindItemByValue("templateHolder").FindControl("myLiteral1"); 
        myLit.Text = "Course to be taken "
        Session["current"] = true
    } 
 
    protected void completedcourses_Click(object sender, EventArgs e) 
    { 
        RadPanelBar panelbar = (RadPanelBar)courseplaceholder.FindControl("RadPanelBar1"); 
        Literal myLit = (Literal)panelbar.FindItemByValue("templateHolder").FindControl("myLiteral1"); 
        myLit.Text = "Already taken course "
        Session["current"] = false
    } 
 
    void complete_Click(object sender, EventArgs e) 
    { 
    } 
 
 
    class TextBoxTemplate : ITemplate 
    { 
        public void InstantiateIn(Control container) 
        { 
        } 
    } 
 


All the best,
Paul
the Telerik team

Check out Telerik Trainer, the state of the art learning tool for Telerik products.
0
Jiro Feingold
Top achievements
Rank 1
answered on 19 Jan 2009, 05:20 PM
So the panelbar missing an id was causing the problem?
Tags
PanelBar
Asked by
Jiro Feingold
Top achievements
Rank 1
Answers by
Paul
Telerik team
Jiro Feingold
Top achievements
Rank 1
Share this question
or