Click here to Skip to main content
15,885,278 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
Hello. I have an ajax accordian. In which I have HeaderTemplate and ContentTemplate. Both are binding data from database. In my ContentTemplate I have checkbox. Now I want to get text of checked checkbox items according to HeaderTemplate Index. Below is my code.

ASP.NET
<asp:Accordion ID="Accordion1" runat="server" TransitionDuration="100" SelectedIndex=-1 FramesPerSecond="200" FadeTransitions="true" 
         RequireOpenedPane="false"  OnItemDataBound="Accordion1_ItemDataBound" ContentCssClass="accordion-content" HeaderCssClass="accordion-header" 
         HeaderSelectedCssClass="accordion-selected" onitemcommand="Accordian1_ItemCommand"  >
    
    <HeaderTemplate>
        <%--<asp:LinkButton ID="LinkButton1" runat="server" Text='<%# Eval("Class_Name") %>'  
           CommandName="Select" CommandArgument='<%# Eval("Class_ID")  %>' />--%>
        <%#DataBinder.Eval(Container.DataItem, " Class_Name") %>    
    </HeaderTemplate>
    <ContentTemplate>
        <asp:HiddenField ID="txt_categoryID" runat="server" Value='<%#DataBinder.Eval(Container.DataItem," Class_ID") %>' />
        <asp:GridView ID="GridView1" runat="server" RowStyle-BackColor="#ededed" RowStyle-HorizontalAlign="Left"
            AutoGenerateColumns="false" GridLines="Horizontal"  Width="900px"  >
            <Columns>
                <asp:TemplateField HeaderStyle-HorizontalAlign="Left" HeaderText="Courses" HeaderStyle-BackColor="#d1d1d1"
                    HeaderStyle-ForeColor="#777777">
                    <ItemTemplate>
                    <asp:CheckBox ID="cbCourse" runat="server" AutoPostBack="true" onClick="changeCheckboxText();"  Text='<%#DataBinder.Eval(Container.DataItem," Course_Name") %> ' />
                      
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    </ContentTemplate>  
</asp:Accordion>
        <asp:Button ID="btnNext" runat="server" Text="Next" onclick="btnNext_Click" class="next action-button" />


below is codebehind:

protected void Page_Load(object sender, EventArgs e)
    {   
        //if (Session["stid"] != null && Session["stnm"] != null)
        {
            if (!Page.IsPostBack)
            {
                getData();
               
                
                
               
            }
        }
        //else
        //{
            //Response.Redirect("Default.aspx");
        //}
    }
    public void getData()
    {
        
        string class_name="SELECT Class_ID,Class_Name from Classes";
        
        SqlDataAdapter sqlAdapter = act.SelectRecDa(class_name);
        DataSet myDataset = new DataSet();
        sqlAdapter.Fill(myDataset);

        
        Accordion1.DataSource = myDataset.Tables[0].DefaultView;
        Accordion1.DataBind();
    }
    
    //protected void btnGiveEmail_Click(object sender, EventArgs e)
    //{
    //    int admNo = Accordion1.SelectedIndex + 1;

        

    //    AccordionPane pane = Accordion1.Panes[Accordion1.SelectedIndex];
    //    Label lbl = pane.FindControl("lblEmail") as Label;
    //    //lbl.Text = "Email: " + dt.Rows[0]["Email"].ToString();
    //}
    protected void Accordion1_ItemDataBound(object sender, AjaxControlToolkit.AccordionItemEventArgs e)
    {
        if (e.ItemType == AjaxControlToolkit.AccordionItemType.Content)
        {

            string sqlSelect = "SELECT Course_Name from Courses where Class_ID = '" + ((HiddenField)e.AccordionItem.FindControl("txt_categoryID")).Value + "' ";
            
            SqlDataAdapter sqlAdapter = act.SelectRecDa(sqlSelect);
            DataSet myDataset = new DataSet();
            sqlAdapter.Fill(myDataset);

            var d = Accordion1.SelectedIndex;

            GridView grd = new GridView();
            grd = (GridView)e.AccordionItem.FindControl("GridView1");
            grd.DataSource = myDataset;
            grd.DataBind();


        }
    }


This is javascript fnction to get selected pane index.
JavaScript
<script type="text/javascript" language="javascript">

    function pageLoad() {
        var behaviorId = $get("<%= Accordion1.ClientID%>").AccordionBehavior._id;
        $find(behaviorId).add_selectedIndexChanged(
        accordion_selectedIndexChanged);
    }

    function accordion_selectedIndexChanged(sender, args) {
        var oldIndex = args.get_oldIndex();
        var newIndex = args.get_selectedIndex();
        //alert(newIndex);

        function changeCheckboxText(cbCourse) {

            if (cbCourse.checked) {
                //alert(cbCourse.nextSibling.innerHTML);
                alert("a");
            }
        }
    
        // Do something...
    }
    
</script>


Now, when user click on a pane, it will open some checkboxes with text on right side. what i want is when user selects the checkbox and click on Next button, I want text of checked checkboxes and its parent headetTemplate id and text.
Posted

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900