在AJAX Accordion Control中使用FindControl查找标签

时间:2012-08-27 17:58:45

标签: asp.net ajax vb.net accordion findcontrol

我在页面和每个手风琴分支中定义了一个AJAX Accordion控件我有一个从SQL数据库中获取其值的标签

<cc1:Accordion DataSourceID="sqlDSSomeGroup" ID="acrd" runat="server"  
  <ContentTemplate>
     <asp:Label ID="lbl" runat="server" Text='<%#Eval("SomeGroupID") %>' />
  </ContentTemplate>
</cc1:Accordion>

标签显示正确的值。我的问题是如何使用FindControl获取代码中的标签值。现在,以下内容正确找到了Accordion。

Dim acc As AjaxControlToolkit.Accordion = CType(placeHolder.FindControl("acrd"), AjaxControlToolkit.Accordion)

但是当我试图使用以下内容获取标签的值时,我只得到第一个手风琴被选中的值,即使选择了不同的手风琴分支。我知道我必须以某种方式在某处使用选定的索引,但我不知道在哪里以及如何。任何帮助将不胜感激?

Dim IDinCodeBehind As Label
IDinCodeBehind = CType(acc.FindControl("lbl"), Label)

1 个答案:

答案 0 :(得分:1)

我做了一个小型演示,以获取selectedPane 。在此窗格中访问控制集合并找到相应的标签

public partial class demo : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            // init data, demo purposes
            List<Person> liste = new List<Person>();
            liste.Add(new Person() { ID = 0, Name = "jon0" });
            liste.Add(new Person() { ID = 1, Name = "jon1" });
            liste.Add(new Person() { ID = 2, Name = "jon2" });
            liste.Add(new Person() { ID = 3, Name = "jon3" });
            liste.Add(new Person() { ID = 4, Name = "jon4" });
            Accordion1.DataSource = liste;
            Accordion1.DataBind();
        }
    }
    protected void btnGetName_Click(object sender, EventArgs e)
    {
        // get current pane by using Accordion1.SelectedIndex
        Label lblName = Accordion1.Panes[Accordion1.SelectedIndex].FindControl("lblName") as Label;
        Debug.WriteLine("Label: " + lblName.Text);
    }
}
public class Person
{
    public string Name { get; set; }
    public int ID { get; set; }
}

这是我的 aspx代码

<asp:Accordion ID="Accordion1" runat="server" SelectedIndex="0">
    <HeaderTemplate>
         <asp:Label ID="lblID" runat="server" Text='<%#"Pane" + Eval("ID") %>' />
         <hr />
    </HeaderTemplate>
    <ContentTemplate>
     <asp:Label ID="lblName" runat="server" Text='<%#Eval("Name") %>' />
     <br />
     <br />
    </ContentTemplate>
</asp:Accordion>
<asp:Button ID="btnGetName" runat="server" Text="GetName" onclick="btnGetName_Click" />