Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

Datagrid error when paging: Index was out of range. Must be non-negative and less than the size of the collection.

Posted on 2008-10-28
4
2,416 Views
Last Modified: 2013-11-07
I have a gridview which lists people's names retrieved from a SQL database. I am assigning the row index to the image buttons' command argument when each row is created. The image buttons work fine when on the first page of data. If I go to page 2 of the gridview and click on an image button, I receive the following error:

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

Source Error:


Line 366:            Case "Notes"
Line 367:                Dim index As Integer = Convert.ToInt32(e.CommandArgument)
Line 368:                Dim selectedRow As GridViewRow = GridView1.Rows(index)
Line 369:
Line 370:                lblID = selectedRow.Cells(0).FindControl("lblID")
 

Source File: e:\inetpub\people\manage_individuals.aspx.vb    Line: 368

Stack Trace:


[ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index]
   System.Collections.ArrayList.get_Item(Int32 index) +2776637
   System.Web.UI.WebControls.GridViewRowCollection.get_Item(Int32 index) +10
   _default.GridView1_RowCommand(Object sender, GridViewCommandEventArgs e) in e:\inetpub\vs137121\pastoral-care\people\manage_individuals.aspx.vb:368
   System.Web.UI.WebControls.GridView.OnRowCommand(GridViewCommandEventArgs e) +105
   System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +76
   System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs e) +95
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +35
   System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object source, EventArgs e) +117
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +35
   System.Web.UI.WebControls.ImageButton.OnCommand(CommandEventArgs e) +115
   System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument) +171
   System.Web.UI.WebControls.ImageButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102

 


--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.42; ASP.NET Version:2.0.50727.42


<asp:TemplateField HeaderText="">
                        <ItemTemplate>
                           <asp:Button Text="Edit" CommandName="Edit" CausesValidation="false" runat="server" ID="btEdit" CssClass="btnClass" />
                        </ItemTemplate>
                        <EditItemTemplate>
                           <asp:Button Text="Update" CommandName="Update" CausesValidation="true" runat="server" ID="btUpdate" CssClass="btnClass" />&nbsp;
                           <asp:Button Text="Cancel" CommandName="Cancel" CausesValidation="false" runat="server" ID="btCancel" CssClass="btnClass" />
                        </EditItemTemplate>
                     </asp:TemplateField>
                    <asp:TemplateField HeaderText="Actions" HeaderStyle-Font-Bold="True" HeaderStyle-HorizontalAlign="Center">
                        <ItemTemplate>
                           <asp:ImageButton ImageUrl="/images/view_person.gif" CommandArgument='<%# Container.DataItemIndex %>' Text="Click to view details on this person" CommandName="View" runat="server" ID="ibnView" />&nbsp;
                           <asp:ImageButton imageURl="/images/remove_person.gif" CommandArgument='<%# Container.DataItemIndex %>' Text="Click to remove this person from the register" CommandName="DeletePerson" runat="server" ID="ibnDelete" />&nbsp;
                           <asp:ImageButton ImageUrl="/images/notes.gif" CommandArgument='<%# Container.DataItemIndex %>' Text="Click to view notes on this person" CommandName="Notes" runat="server" ID="ibnNotes" />
                        </ItemTemplate>
                     </asp:TemplateField>
 
Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated
        If e.Row.RowType = DataControlRowType.DataRow Then
 
            Dim ibn1 As ImageButton
            Dim ibn2 As ImageButton
            Dim ibn3 As ImageButton
 
            ibn1 = CType(e.Row.FindControl("ibnView"), ImageButton)
            ibn2 = CType(e.Row.FindControl("ibnDelete"), ImageButton)
            ibn3 = CType(e.Row.FindControl("ibnNotes"), ImageButton)
 
            ibn1.CommandArgument = e.Row.RowIndex
            ibn2.CommandArgument = e.Row.RowIndex
            ibn3.CommandArgument = e.Row.RowIndex
 
            ibn2.Attributes.Add("onclick", "return " & _
            "confirm('Are you sure you want to remove this person?');")
 
        End If
    End Sub

Open in new window

0
Comment
Question by:turpya
  • 2
  • 2
4 Comments
 
LVL 8

Accepted Solution

by:
tony_angelopoulos earned 500 total points
ID: 22828212
It has to do with using a template field.  You have to use the RowIndex instead.
see this post:

http://bytes.com/forum/thread601880.html
0
 

Author Comment

by:turpya
ID: 22836718
Hi,

I am doing what the article says... "To get the index, get it from current Row's RowIndex property, for example in RowCreated event".

I am using paging (AllowPaging="True"). It works on page one of the gridview, but not on any other pages - if not on page 1 and I click a button, I get the aforementioned error.

0
 
LVL 8

Expert Comment

by:tony_angelopoulos
ID: 22844374
hmmmm.... try e.row.dataitemindex  instead of row index. Paging can be a bear!
0
 

Author Comment

by:turpya
ID: 22847012
Thanks Tony.
I removed CommandArgument='<%# Container.DataItemIndex %>' from the template image buttons.

I realised I was assigning the CommandArgument twice: once in RowCreated event...
ibn3.CommandArgument = e.Row.RowIndex, the other on the image button in the gridview template.

Also removed gridview databinding from the PageIndexChanging event - not sure if this had any bearing on anything though.




0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…

789 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question