当用户单击内部中继器中的单选按钮时,如何查找外部中继器的ItemIndex

时间:2015-07-08 14:15:21

标签: asp.net

我有一个嵌套的转发器,当用户单击内部转发器中的单选按钮时,需要找到外转发器的ItemIndex。 我尝试使用rb.parent.parent和rb.NamingContainer.NamingContainer但我得到了转换错误。 我还搜索了不同的网站有关类似的问题,但他们不是我的解决方案。 任何评论都非常感谢。

protected void rptrSubscriptionGroups_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    Repeater rptrSubscriptions = (Repeater)e.Item.FindControl("rptrSubscriptions");
    if (rptrSubscriptions != null)
    {
        RepeaterItem item = e.Item;
        if (e.Item.ItemType == (ListItemType.Item) || e.Item.ItemType == (ListItemType.AlternatingItem))
        {
            DataTable SubscriptionTbl = SubscriptionsBind(SelectedLanguageID, SelectedPlatformID, SelectedCurrencyID, SelectedGroupID, 1); 
            rptrSubscriptions.DataSource = SubscriptionTbl;
            rptrSubscriptions.DataBind();
        }
    }
}

protected void HighlightSubscription(object source, EventArgs e)
{
    RadioButton rb = source as RadioButton;
    int CurrentrepeaterItemIndex = ((RepeaterItem)rb.NamingContainer).ItemIndex;

    // save current row index in a hiddden field
    hiddenSelectedSubscriptionRowIndex.Value = CurrentrepeaterItemIndex.ToString();

    int ParentRepeaterItemIndex = ((RepeaterItem)rb.NamingContainer.NamingContainer).ItemIndex;
hiddenSelectedSubscriptionGroupRowIndex.Value = ParentRepeaterItemIndex.ToString();
}

<asp:Repeater ID="rptrSubscriptionGroups" runat="server"     OnItemDataBound="rptrSubscriptionGroups_ItemDataBound" OnItemCommand="rptrSubscriptionGroups_ItemCommand">
    <ItemTemplate>
        <asp:Repeater ID="rptrSubscriptions" runat="server"  OnItemDataBound="rptrSubscriptions_ItemDataBound" OnItemCommand="rptrSubscriptions_ItemCommand">
             <ItemTemplate>
                  <asp:RadioButton ID="rbSubscription" runat="server"  OnCheckedChanged="HighlightSubscription" AutoPostBack="true"/>
             </ItemTemplate>
        </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>

1 个答案:

答案 0 :(得分:1)

你说你曾尝试int CurrentrepeaterItemIndex = ((RepeaterItem)rb.Parent.Parent.Parent).ItemIndex; ,但我认为你可以用它来做:

<ItemTemplate>
                  <asp:RadioButton ID="rbSubscription" runat="server"  OnCheckedChanged="HighlightSubscription" AutoPostBack="true"/>

第一个父级到达ItemTemplate的一个级别:

<asp:Repeater ID="rptrSubscriptions" runat="server"  OnItemDataBound="rptrSubscriptions_ItemDataBound" OnItemCommand="rptrSubscriptions_ItemCommand">

第二个父级再次上升到内部中继器的一个级别:

<asp:Repeater ID="rptrSubscriptionGroups" runat="server"     OnItemDataBound="rptrSubscriptionGroups_ItemDataBound" OnItemCommand="rptrSubscriptionGroups_ItemCommand">
    <ItemTemplate>

第三个父级将转到外部Repeater项目,您可以获取项目索引。

{{1}}