2015-04-10 2 views
0

Я пытаюсь передать индекс строки ... и он отлично работает ... но мой gridview имеет возможность подкачки и когда я использую индекс на второй странице, например , Я получаю ошибку вне диапазона ... но индекс, который я получил правильно. Например. У меня есть 4 строки на первой странице и 4 в секунду. Если я нажму на первый элемент второй страницы, я получил индекс 5 ... это правильно. И у меня 8 itens ... почему индекс 5 выходит за пределы диапазона?GridView -out диапазона только на второй странице

Там мой код:

<asp:GridView ID="GridView1" runat="server" CellPadding="4" 
      BorderStyle="None" BorderWidth="0px" CellSpacing="1" Width="100%" 
       GridLines="Vertical" AllowPaging="True" onrowcommand="GridView1_RowCommand" 
       onselectedindexchanged="GridView1_SelectedIndexChanged" 
       onpageindexchanging="GridView1_PageIndexChanging" 
       onrowdatabound="GridView1_RowDataBound" PageSize="5" HorizontalAlign=Left 
       > 
           <PagerStyle HorizontalAlign="Center" /> 
           <RowStyle CssClass="tabela_texto2" HorizontalAlign="Center" 
            VerticalAlign="Middle" /> 
        <AlternatingRowStyle CssClass="tabela_texto1" /> 

      <Columns> 
       <asp:TemplateField> 
    <ItemTemplate> 
        <asp:Button Text="Status" CommandName="atender" CommandArgument='<%# Container.DataItemIndex %>' ID="atender" runat="server" OnClientClick="return confirm('Tem certeza que deseja aterar os status?');" /> 

    </ItemTemplate> 
</asp:TemplateField> 
        <asp:TemplateField> 
    <ItemTemplate> 
        <asp:Button Text="Ver no mapa" CommandName="ver" CommandArgument='<%# Container.DataItemIndex %>' ID="ver" runat="server"/> 

    </ItemTemplate> 
</asp:TemplateField> 

      <asp:TemplateField> 
    <ItemTemplate> 
        <asp:Button Text="Excluir" CommandName="excluir" CommandArgument='<%#((GridViewRow)Container).RowIndex%>' ID="excluir" runat="server" OnClientClick="return confirm('Tem certeza que deseja aterar os status?');" /> 

    </ItemTemplate> 
</asp:TemplateField> 


      </Columns> 
     </asp:GridView> 

и линия, которая получает сообщение об ошибке является:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
     { 
      string commandname = e.CommandName; 
      int index = int.Parse(e.CommandArgument.ToString()); 
      if (commandname.Equals("atender")) 
      { 

       string id = GridView1.Rows[index].Cells[3].Text //this line is getting error. 
} 
} 
+0

Благодаря 'Ряды [индекс] 'или' Ячейки [3] '? Помните, что «index» имеет строку в сетке, а не индекс элемента во всей сборной коллекции. – SimpleVar

+0

Строки [указатель] - проблема – Chucrutes

+0

Нет 4-й ячейки. Попробуйте 'Ячейки [2]'. –

ответ

1

Это может быть обходной путь:

int index = int.Parse(e.CommandArgument.ToString()) % GridView1.PageSize 
+0

он отлично работает! Спасибо всем! – Chucrutes

Смежные вопросы