использовать индекс элемента повторителя в скрытом поле

#.net #asp.net #repeater #hiddenfield

#.net #asp.net #повторитель #hiddenfield

Вопрос:

Как установить индекс элемента в столбце повторителя со скрытыми полями в asp.net .
Я написал следующий код, но он не показывает значение индекса в скрытом поле.

 <ItemTemplate>
    <tr>
        <td>
            <asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Container.ItemIndex 1 %>' />
            <%--<asp:HiddenField ID="hfIndex" runat="server" Value='<%#Container.ItemIndex 1 %>' />--%>
        </td>
        <td>
            <asp:Label ID="lblExpenseGLCode" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ACM_ACCOUNT_CODE")%>'></asp:Label>
        </td>
        <td>
            <asp:Label ID="lblAccountGLDescription" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ACM_ACCOUNT_DESC")%>'></asp:Label>
        </td>
    </tr>
</ItemTemplate>
  

Ответ №1:

Я не вижу ничего плохого в itemtemplate, вероятно, было бы полезно, если бы вы предоставили весь код повторителя в виде прямого копирования / вставки на случай, если есть какие-либо другие ошибки.

Другой подход, который вы можете предпринять, — добавить событие, связанное с элементом данных повторителя, а затем захватить скрытое поле в событии. Как только у вас есть скрытый ввод, вы можете просто установить его значение.

Код повторителя:

 <asp:Repeater ID='myRepeater' runat="server" OnItemDataBound='myRepeater_OnItemDataBound'>
      <ItemTemplate>
        <asp:HiddenField ID='myHidden' runat="server" />
      </ItemTemplate>
</asp:Repeater>
  

И код, лежащий в основе события:

 protected void myRepeater_OnItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            var myHidden = (HiddenField)e.Item.FindControl("myHidden");
            myHidden.Value = e.Item.ItemIndex.ToString();
        }
    }
  

Ответ №2:

это должно быть так:

 Value="<%# DataBinder.Eval(Container, "ItemIndex") %>"
  

Комментарии:

1. Спасибо. у меня это сработало. Как нам определить первый и последний элемент

Ответ №3:

попробуйте следующее:

 <asp:Repeater ID="myRepeater" runat="server">
<HeaderTemplate>
    <table>
</HeaderTemplate>
<ItemTemplate>
    <tr>
        <td><%# Container.ItemIndex %></td>
        <!-- or maybe -->
        <td><%# Container.ItemIndex   1 %></td>
        <td><%# DataBinder.Eval(Container, "DataItem.Name") %></td>
    </tr>
</ItemTemplate>
<FooterTemplate>
    </table>
</FooterTemplate>
</asp:Repeater>
  

Комментарии:

1. Container.ItemIndex немного проще, чем принятый ответ IMO.