0

ページで定義された AJAX アコーディオン コントロールがあり、各アコーディオン ブランチ内に、SQL データベースから値を取得するラベルがあります。

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

ラベルは正しい値を示しています。私の質問は、コード ビハインドで FindControl を使用してラベルの値を取得する方法です。今のところ、以下はアコーディオンを正しく見つけます。

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

しかし、次を使用してラベルの値を取得しようとすると、別のアコーディオン ブランチが選択されていても、最初のアコーディオンが選択されているかのように値を取得するだけです。選択したインデックスをどこかで使用する必要があることはわかっていますが、どこでどのように使用するのかわかりません。何か助けていただければ幸いです。

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

1 に答える 1

1

selectedPaneを取得するために小さなデモを行いました。このペイン内でControls コレクションにアクセスし、対応するラベルを見つけます

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" />
于 2012-08-27T18:40:24.580 に答える