Web Forms :: Adding A New Row To GridView Fails - Index Out Of Range?
Mar 15, 2011
I'm having a problem when trying to add a new row to a grid view when the grid view paging is "2" for example. Basically, when the data I'm trying to add will be on page number two of the grid, the drop down list I'm trying to bind raises an exception saying that the index is out of range.
How can I add a new grid row with paging and how to tell the drop down list that the row it is looking for is no longer 11, but 1 on the second page?
it is a simple question, but i didn't understand. here is the code below:
Private Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated Dim drv As DataRowView If e.Row.RowType = DataControlRowType.DataRow Then For i As Integer = 0 To e.Row().Cells.Count If " ".Equals(e.Row().Cells(i).Text) Then e.Row().Cells(i).Text = "" End If Next End If End Sub
the line "If e.Row.RowType = DataControlRowType.DataRow Then" occured exception below System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection
I am getting error Specified index out of range of valid values. Parameter name index. I tried to put a breakpoint and see where am I getting the error. I have 5 columns (1 hidden). first 3 columns- no issue. But when the control reaches the 4th column it throws the error. I saw that I am getting correct values for the first 3..no ide what is going wrong with the 4th one.
AutoGenerateColumns: Flase/True ( i tried both) If i remove the gvOff.Columns[index].HeaderText portions, GridView works fine, but when i put the gvOff.Columns[0].HeaderText, i get the exceptional error.
, i couldn't solve it. If you need further info, inform me.
EDITED:
Hold on! I commented the HeaderText portion and tested int i = gvOffer.Columns.Count; I found count is 0 eventhough the columns print out with DataBind()... Why? NOTE: AutoColumn in this case is set to true. I guess i will have to edit the column names from DataTable.
I have used the DataKeyNames property of the GridView to assign the column name whose visible property is set to false to get the cells value when the column is kept invisible. But, sometimes there is an error on this line of code - string cellValue = GridView.DataKeys[e.NewEditIndex].Value.ToString(); Following Error is generated -
Server Error in '/' Application. 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
Basically it is the form when user enter all the data and press the submit button then the data will appear on the grid view . On grid view there is option edit when i edit the row and press the update button then the following error will occur
int cid = Int32.Parse(noticeDetails.DataKeys[e.RowIndex].Value.ToString()); "Argumentout of range exception and was unhandled by user code. Index was out of range must be non negative and out of collection the aspx.cs code0
i use objectdatasource control for bind record and also in gridview paging.in my gridview there is a linkbutton(edit) when i click it then it redirect to next page with some key value.but problem is when i try to paging in gridview an error is occure that is Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
I have been trying to hide a column but make use of the value in another function but the function i am trying to hide it give me and error at the embolded line. System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Public Sub FetchDetails() Dim valtable As DataTable = New DataTable() valtable.Columns.Add("LINK") valtable.Columns.Add("WATCH PERIOD") valtable.Columns.Add("DAY ENTRY") valtable.Columns.Add("listid") Dim seltext As String = "SELECT [Watchlistname], [Watchlisturl], [Watchlistdate],[listid] FROM [Watchlist]" Dim madap As SqlDataAdapter = New SqlDataAdapter(seltext, Connection()) Dim mdset As DataSet = New DataSet() Dim i As Integer = 0, pager As Integer = 0 madap.Fill(mdset, "WATCHLIST") Session("tab") = mdset.Tables("WATCHLIST") For Each arow As DataRow In Session("tab").Rows Dim valrow As DataRow = valtable.NewRow() valrow("LINK") = arow("Watchlisturl") valrow("WATCH PERIOD") = arow("Watchlistname") valrow("DAY ENTRY") = arow("Watchlistdate") valrow("listid") = arow("listid") valtable.Rows.Add(valrow) Next 'Dim str As String = ChrW(8358) gridWatchlist.DataSource = valtable gridWatchlist.DataBind() gridWatchlist.HeaderRow.Cells(1).Visible = False gridWatchlist.HeaderRow.Cells(2).Text = "WATCH PERIOD" gridWatchlist.HeaderRow.Cells(3).Text = "DAY ENTRY" gridWatchlist.Columns(4).Visible = False End Sub
I have used to code below successfully to export a gridview to an excel spreadsheet, however when i use it for a gridview with data from a different table 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
The thing is it works locally fine but when i upload to my shared server i receive the error above?
somehow I broke this b/c it was working... I've got a gridview with a standard delete button. here is the top of the gridview:
[Code]....
and here is the SQL source:
[Code]....
here is my rowdeleting event:
[Code]....
the error: Index was out of range. Must be non-negative and less than the size of the collection.Parameter name: index happens after that on line 31 of ss.gv_NotificationDetails
[Code]....
interestingly if I add more columns to the datakeynames, the error moves up one line to e.Values(0unfortunately I do not remember everything I have changed since the last time I tested this.
I have a couple of textboxes (actually a set of pairs of textboxes) where users can either enter a value or a percentage of a value but cannot use both. So in any given time some of these textboxes are disabled depending on which option the user chose.
For the textboxes representing percentages, there is a range validator to make sure only values from 0 to 100 are entered. If user selectes to enter datanot in percentage form, the percentage textbox gets filled automatically based on the value user enters. So if the total is something like 8 and user enters 2, the corresponding percentage textbox gets filled with 25% (minus the % sign).
However, the vaidation fails as if there is nothing there, persumably because the textbox is disabled. How do I get around this?
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. 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
I recently had to remove a field from my datakey on all three gridview tables. On the top level table the field (ignum) remains as a non key field. On the two lower level tables it was removed completely. Now, the top level gridview opens correctly, but when I click on select this should bring up all the records in the second gridview associated with the selected row in the first gridview, but I get the following error:
[Code]....
I've looked at everything I can thing of and everything looks ok. The tables look good, I've removed all references to the removed field and I've restructured all the code to account for the changes. I'm missing something, but I don't know what. I've gone through debug step by step and the error occurs as I leave the GridView1_SelectedIndexChanged code. It goes down to the End Sub line with no errors, but when I step again it errors out. Here is that section of code.
Index was out of range. Must be non-negative and less than the size of the collection.Parameter name: index after binding the gridview with data i need to set the column width as defined in a array.i am setting it as
string[] cwidth = Session["width"].ToString().Split(','); int colcount = coln.Length; for (int i = 0; i <= colcount - 1; i++) { Gridview1.Columns[i].HeaderText = coln[i].ToString(); int swidth = Convert.ToInt32(cwidth[i]); Gridview1.Columns[i].HeaderStyle.Width = Convert.ToInt32(cwidth[i]); }
I have an array called"List" with 1 item and a gridview "grdWorkingDays" with two columns.
In the First column, I want to display the working days dynamically from the arraylist and in the second column I need to display a dropdown with CL/PL/Halfday(Which has values from a database table and is already written in a method) against each date of array list.
The code is:
int NoOfWorkingDays = List.Count; for (int j = 0; j < NoOfWorkingDays; j++){ String Date = ((Label)grdWorkingDays.Rows[j].Cells[0].FindControl("lblLeaveType")).Text; Date = List[j].ToString();
[Code] .....
When I run this, I am getting error as:
"Index was out of range. Must be non-negative and less than the size of the collection." pointing to the 1st row of for loop.
I am struggling with this for past few days and count find what the error is.
FYI, the array count is being calculated correctly as "1" .
Our system is designed to deploy to regions with unreliable and/or insufficient network connections. We build our own fault tolerating data replication services that uses BITS.
Due to some security and maintenance requirements, we implemented our own ASP.NET file download service on the server side, instead of just letting IIS serving up the files. When BITS client makes an HTTP download request with the specified range of the file, our ASP.NET page pulls the demanded file segment into memory and serve that up as the HTTP response. That is the theory. ;) This theory fails in artificial lab scenarios but I would not let the system deploy in real life scenarios unless we can overcome that.
Lab scenario: I have BITS client and the IIS on the same developer machine, so practically I have enormous network "bandwidth" and BITS is intelligent enough to detect that. As BITS client discovers the unlimited bandwidth, it gets more and more "greedy". At each HTTP request, BITS wants to grasp greater and greater file ranges (we are talking about downloading CD iso files, videos), demanding 20-40MB inside a single HTTP request, a size that I am not comfortable to pull into memory on the server side as one go. I can overcome that simply by giving less than demanded. It is OK.
However, BITS gets really "confident" and "arrogant" demanding files WITHOUT specifying the download range, i.e., it wants the entire file in a single request, and this is where things go wrong. I do not know how to answer that response in the case of a 600MB file. If I just provide the starting 1MB range of the file, BITS client keeps sending HTTP requests for the same file without download range to continue, it hammers its point that it wants the entire file in one go. Since I am reluctant to provide the entire file, BITS gives up after several trials and reports 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 61: Dim favorname As String = GridView1.DataKeys(row.RowIndex).ToStringLine 62: Line 63: ' Pass the value of the selected Employye ID to the Delete //command. My coding as Protected Sub btnMultipleRowDelete_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnMultipleRowDelete.Click ' Looping through all the rows in the GridView For Each row As GridViewRow In GridView1.Rows Dim checkbox As CheckBox = CType(row.FindControl("cbRows"), CheckBox) 'Check if the checkbox is checked. 'value in the HtmlInputCheckBox's Value property is set as the //value of the delete command's parameter. If checkbox.Checked Then ' Retreive the Favorname Dim favorname As String = GridView1.DataKeys(row.RowIndex).ToString ' Pass the value of the selected Employye ID to the Delete //command. SqlDataSource1.DeleteParameters("Favorname").DefaultValue = favorname.ToString() SqlDataSource1.Delete() End If Next row End Sub <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" Width="563px" AutoGenerateColumns="False"> <RowStyle CssClass="fontsmallthennormal" /> <HeaderStyle CssClass="fontnormalblue8" /> <EditRowStyle CssClass="fontsmallthennormal" /> <Columns> <asp:TemplateField> <ItemTemplate> <asp:CheckBox ID="cbRows" runat="server"/> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="Favorname" HeaderText="Favorname" SortExpression="Favorname" /> <asp:BoundField DataField="FavorDate" HeaderText="FavorDate" SortExpression="FavorDate" /> </Columns> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" ConnectionString="<%$ ConnectionStrings:yyyy %>" runat="server" SelectCommand="SELECT [US], [Favorname], [FavorDate] FROM [TBL_FAVORITES] WHERE ([US] = @US)" DeleteCommand="DELETE from TBL_FAVORITES where [Favorname]= @Favorname" > <SelectParameters > <asp:ControlParameter ControlID="txtusername1" Name="US" PropertyName="Text" Type="String" /> </SelectParameters> <DeleteParameters> <asp:Parameter Name="Favorname" /> </DeleteParameters> </asp:SqlDataSource>