如何在渲染时间中获取C#ASP.NET ListView中当前记录的索引

AaA*_*AaA 6 c# asp.net

我有一个列表视图如下:

<asp:ListView ID="lstTopRanks" runat="server">
    <ItemTemplate>
        <div class="Amazing-{recordNumber}">{itemdata}</div>
    </ItemTemplate>
</asp:ListView>
Run Code Online (Sandbox Code Playgroud)

我想替换{recordNumber}一个运行的计数器,所以显示的第一个记录有1,第二个将是2,依此类推.

我怎样才能做到这一点?

提前致谢

Ako*_*acs 16

您可以使用Container.DisplayIndex,或者Container.DataItemIndex,如果ID不是来自例如数据库.

关键是:class="Amazing-<%#Container.DisplayIndex + 1 %>".

如果recordNumber确实来自外部数据源,你也可以这样做: class='Amazing-<%# Eval("YourDatabaseIDColumn") %>'.

如果要分页数据源,DisplayIndex和DataItemIndex会有所不同.DisplayIndex是一个始终在当前页面上开始的运行索引,DataItemIndex是整个数据源中的运行数字.

这是一个例子:

代码隐藏:

//just to represent something like a db table with an ID and a description
Pair[] data = new Pair[] { new Pair(123, "row1"), new Pair(124, "row2"), new Pair(125, "row3"), new Pair(126, "row4"), new Pair(127, "row5"), new Pair(128, "row6"), new Pair(129, "row7"), new Pair(130, "row8"), new Pair(131, "row9"), new Pair(132, "row10") };

lstTopRanks.DataSource = data;
lstTopRanks.DataBind();
Run Code Online (Sandbox Code Playgroud)

ASPX:

  <asp:ListView ID="lstTopRanks" runat="server">
     <LayoutTemplate><asp:PlaceHolder ID="ItemPlaceHolder" runat="server"></asp:PlaceHolder></LayoutTemplate>
     <ItemTemplate>
        <div class="Amazing-<%#Container.DisplayIndex + 1 %>">
           DisplayIndex: <b><%#Container.DisplayIndex %></b>;
           DataItemIndex: <b><%#Container.DataItemIndex %></b>, 
           ID and Text: <i><%#((Pair)Container.DataItem).First %>, <%#((Pair)Container.DataItem).Second %></i>
        </div>
     </ItemTemplate>
  </asp:ListView>

  <asp:DataPager ID="DataPagerProducts" runat="server" PagedControlID="lstTopRanks" PageSize="3" >
     <Fields>
        <asp:NextPreviousPagerField ShowFirstPageButton="True" ShowNextPageButton="False" />
        <asp:NumericPagerField />
        <asp:NextPreviousPagerField ShowLastPageButton="True" ShowPreviousPageButton="False" />
     </Fields>
  </asp:DataPager>
Run Code Online (Sandbox Code Playgroud)

结果如下:

结果