Index was out of range. Must be non-negative and less than the size of the collection. Parameter name:Index
I think it may be a null issue, but what would be the best way to overcome it on my code below. Basiclly i fill my dataset then databind it to a datagridview, then i hide columns i don't need to be seen in my datagrid, although the datagrid fills fine it throws the above message. my sample code below:
DataSet dsLookup = new DataSet();
dsLookup.ReadXml(response.GetResponseStream());
dataGridView1.DataSource = dsLookup.Tables[0];
dataGridView1.Columns["StockNumber"].DisplayIndex = 0;
dataGridView1.Columns["RegistrationNumber"].DisplayIndex = 1;
dataGridView1.Columns[0].Visible = false;
dataGridView1.Columns[1].Visible = false;
VulpesPosted Mar 8, 2012, 11:31 AM
dataGridView1.Columns[21].Visible = false;
dataGridView1.Columns[22].Visible = false;
dataGridView1.Columns[23].Visible = false;
dataGridView1.Columns[24].Visible = false;
dataGridView1.Columns[25].Visible = false;
dataGridView1.Columns[26].Visible = false;
dataGridView1.Columns[27].Visible = false;
dataGridView1.Columns[28].Visible = false;
dataGridView1.Columns[29].Visible = false;
With this one:
for(int i = 21; i < dataGridView1.Columns.Count; i++) dataGridView1.Columns[i].Visible = false;
VulpesPosted Mar 8, 2012, 11:39 AM
mike DelvottiPosted Mar 8, 2012, 11:35 AM
mike DelvottiPosted Mar 8, 2012, 11:34 AM
Can i use that on the other lines as well as a failsafe incase on other returns the lines don't exist either? for instance as below:
if (dataGridView1.Columns.Count > 28)
dataGridView1.Columns[28].Visible = false;
if (dataGridView1.Columns.Count > 29)
dataGridView1.Columns[29].Visible = false;
so if in future say one of the xml returns only come back with 10 coulmns in theory with that code as above on every line it wouldn't matter is that correct?
VulpesPosted Mar 8, 2012, 11:23 AM
mike DelvottiPosted Mar 8, 2012, 11:18 AM
dataGridView1.Columns[29].Visible = false;
In that case is there any way to check to see if those columns exist? as some returns may contain column[29]
VulpesPosted Mar 8, 2012, 11:04 AM
A more likely explanation is that the XML file is such that it's not generating 30 columns of data.
If you're not sure, you could try commenting out lines starting from the bottom until a point is reached when the exception no longer occurs.
mike DelvottiPosted Mar 8, 2012, 10:36 AM
I think the below section here maybe throwing the fault as some of the entries it returns are blank and maybe needs to ignore nulls?
dataGridView1.Columns["StockNumber"].DisplayIndex = 0;
dataGridView1.Columns["RegistrationNumber"].DisplayIndex = 1;
dataGridView1.Columns["MakeDescription"].DisplayIndex = 2;
dataGridView1.Columns["ModelDescription"].DisplayIndex = 3;
dataGridView1.Columns["SpecDescription"].DisplayIndex = 4;
dataGridView1.Columns["Colour"].DisplayIndex = 5;
dataGridView1.Columns["BodyStyle"].DisplayIndex = 6;
dataGridView1.Columns["Transmission"].DisplayIndex = 7;
dataGridView1.Columns["EngineSize"].DisplayIndex = 8;
dataGridView1.Columns["FuelType"].DisplayIndex = 9;
dataGridView1.Columns["Mileage"].DisplayIndex = 10;
dataGridView1.Columns["RetailPrice"].DisplayIndex = 11;
The section below here is simply to remove unwanted columns from the grid
dataGridView1.Columns[0].Visible = false;
dataGridView1.Columns[1].Visible = false;
dataGridView1.Columns[2].Visible = false;
dataGridView1.Columns[3].Visible = false;
dataGridView1.Columns[4].Visible = false;
dataGridView1.Columns[6].Visible = false;
dataGridView1.Columns[9].Visible = false;
dataGridView1.Columns[14].Visible = false;
dataGridView1.Columns[21].Visible = false;
dataGridView1.Columns[22].Visible = false;
dataGridView1.Columns[23].Visible = false;
dataGridView1.Columns[24].Visible = false;
dataGridView1.Columns[25].Visible = false;
dataGridView1.Columns[26].Visible = false;
dataGridView1.Columns[27].Visible = false;
dataGridView1.Columns[28].Visible = false;
dataGridView1.Columns[29].Visible = false;
VulpesPosted Mar 8, 2012, 10:14 AM
I think you'll need to pinpoint the line where the exception is being thrown using the debugger.
My suspicion is that it isn't occurring on any of the lines you've shown.
On the face of it, it could only occur on the last, or last but one, lines. But there must be at least two columns in the table otherwise the code would not have got through the two lines before those so an index of 0 or 1 can't be out of range.