Index viel buiten bereik. Moet niet-negatief zijn en kleiner dan de grootte van de collectieparameter name:index

Ik probeer gegevens één voor één rij toe te voegen aan een datagridview, hier is mijn code en er staat:

“Index viel buiten bereik. Moet niet-negatief zijn en kleiner zijn dan de grootte van de verzameling
parameternaam:index”

Wat betekent dit? Wat is het probleem in mijn code?

String Sqlstr2 = "select ItemName from Item where ItemID = '" + tbItemID.Text + "'";
db.DataRead(Sqlstr2);
string ItemName = db.dr["ItemName"].ToString(); 
DataGridView dataGridView1 = new DataGridView();
dataGridView1.Columns[0].Name = "ItemID";
dataGridView1.Columns[1].Name = "ItemName";
dataGridView1.Columns[2].Name = "Qty";
dataGridView1.Columns[3].Name = "UnitPrice";
dataGridView1.Columns[4].Name = "Amount";
string firstColum = tbItemID.Text;
string secondColum = ItemName;
string thirdColum = tbQuantity.Text;
string fourthColum = Convert.ToString(UnitPrice);
string fifthColum = Convert.ToString(sum);
string[] row = new string[]{ firstColum, secondColum, thirdColum, fourthColum, fifthColum };
dataGridView1.Rows.Add(row);

Antwoord 1, autoriteit 100%

U voegt geen kolommen toe aan uw DataGridView

DataGridView dataGridView1 = new DataGridView();//Create new grid
dataGridView1.Columns[0].Name = "ItemID";// refer to column which is not there 

Is het nu duidelijk waarom je een uitzondering krijgt?

Voeg deze regel toe voordat u kolommen gebruikt om de fout op te lossen

dataGridView1.ColumnCount = 5;

Antwoord 2, autoriteit 98%

De fout zegt: “De index is buiten bereik”. Dat betekent dat u een object probeerde te indexeren met een waarde die niet geldig was. Als je twee boeken hebt en ik vraag je om me je derde boek te geven, zul je me raar aankijken. Dit is de computer die je grappig aankijkt. Je zei – “maak een verzameling”. Dus het deed het. Maar aanvankelijk is de verzameling leeg: er zit niet alleen niets in – er is ook geen ruimte om iets op te bergen. “Het heeft geen handen”.

Toen zei je “het eerste element van de collectie is nu ‘ItemID'”. En de computer zegt: “Ik ben nooit gevraagd om ruimte te maken voor een ‘eerste item’.” Ik heb geen handen om dit item dat je me geeft vast te houden.

In termen van je code heb je een weergave gemaakt, maar nooit de grootte opgegeven. Je hebt een

. nodig

dataGridView1.ColumnCount = 5;

Voordat u probeert toegang te krijgen tot kolommen. Wijzigen

DataGridView dataGridView1 = new DataGridView();
dataGridView1.Columns[0].Name = "ItemID";

naar

DataGridView dataGridView1 = new DataGridView();
dataGridView1.ColumnCount = 5;
dataGridView1.Columns[0].Name = "ItemID";

Zie http://msdn.microsoft.com/en- us/library/system.windows.forms.datagridview.columncount.aspx


Antwoord 3, autoriteit 29%

wat betekent dit? is er een probleem in mijn code

Het betekent dat u een locatie of index opent die niet aanwezig is in de collectie.

Om dit te vinden, moet u ervoor zorgen dat uw Gridview 5 kolommen heeft, aangezien u de 5e kolom bij deze regel gebruikt

dataGridView1.Columns[4].Name = "Amount";

Hier is de afbeelding die de elementen van een array toont. Dus als uw Gridview minder kolom heeft, dan de (index + 1)waarmee u er toegang toe hebt, dan ontstaat deze uitzondering.


Antwoord 4, Autoriteit 8%

dataGridView1.Columnsis waarschijnlijk van een lengte van minder dan 5. Toegang tot dataGridView1.Columns[4]Vindt u zich vervolgens buiten de lijst.


Antwoord 5, Autoriteit 4%

Deze fout wordt veroorzaakt wanneer u Paging in Grid-weergave hebt ingeschakeld. Als u een record van het rooster wilt verwijderen, moet u zoiets doen.

int index = Convert.ToInt32(e.CommandArgument);
int i = index % 20;
// Here 20 is my GridView's Page Size.
GridViewRow row = gvMainGrid.Rows[i];
int id = Convert.ToInt32(gvMainGrid.DataKeys[i].Value);
new GetData().DeleteRecord(id);
GridView1.DataSource = RefreshGrid();
GridView1.DataBind();

Ik hoop dat dit de vraag beantwoordt.

Other episodes