C#获取要在HeaderTemplate上使用的第一个转发器项目列值

问题描述 投票:0回答:1

我正在尝试获取转发器上第一个元素的列值,并在转发器的HeaderTemplate上使用它。在搜索并尝试了多种通过智能感知实现此目标的方法之后,我放弃了并决定在此处发布此问题。

我的代码如下:

前端

<asp:Repeater ID="states" runat="server">
    <HeaderTemplate>
        <h1>Stage: <asp:Literal ID="stageName" runat="server"></asp:Literal></h1>
        <ul>
    </HeaderTemplate>
    <ItemTemplate>
        <li><%# DataBinder.Eval(Container.DataItem, "StateName") %></li>
    </ItemTemplate>
    <FooterTemplate>
        </ul>
    </FooterTemplate>
</asp:Repeater>

后端

protected void BindStageStates()
     {
       List<StagesStatesModel> statesList = App.Services.Stages.StagesService.GetStatesByStage(Page.DefaultApp, 1, Page.DefaultCultureId).Where(p => p.StateActive == true).ToList();
       states.ItemDataBound += new RepeaterItemEventHandler(rptStagesStatesDataBound);
       states.DataSource = statesList;
       states.DataBind();
     }

void rptStagesStatesDataBound(object sender, RepeaterItemEventArgs e)
     {
         if (e.Item.ItemType == ListItemType.Header)
         {
             Literal stageName = (Literal)e.Item.FindControl("stageName");
             stageName.Text = // Something to go here..
         }    
     }

提前感谢!

c# asp.net repeater
1个回答
0
投票

尝试OnItemCreated

protected void Repeater_OnItemCreated(Object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Footer)
        {    
          e.Item.FindControl(ctrl);
        }
        if (e.Item.ItemType == ListItemType.Header)
        {
          e.Item.FindControl(ctrl);
        }
    }

通过:How to find controls in a repeater header or footer


0
投票

中继码:

<td>
   <span runat="server" id="lbBranchname" style="font-style:italic;"><%# Eval("branchname")%></span>
</td>

后面的代码:rptBranch_ItemCommand

HtmlGenericControl lbBranchname = e.Item.FindControl("lbBranchname") as HtmlGenericControl;
BranchName = lbBranchname.InnerText;
© www.soinside.com 2019 - 2024. All rights reserved.