web-dev-qa-db-ja.com

インデックスが範囲外でした。負ではなく、コレクションパラメータ名のサイズより小さくなければなりません:index

私はコードをdatagridviewに1行ずつデータを追加しようとしていますが、「インデックスは範囲外でした。負ではなく、コレクションパラメータ名:インデックスのサイズ未満でなければなりません」これの意味は ?私のコードに問題はありますか

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);
15
user2566013

DataGridViewに列を追加していません

DataGridView dataGridView1 = new DataGridView();//Create new grid

dataGridView1.Columns[0].Name = "ItemID";// refer to column which is not there 

なぜ例外が発生するのかが明らかになっていますか?

列を使用してエラーを修正する前にこの行を追加してください

dataGridView1.ColumnCount = 5;
14

エラーには、「インデックスが範囲外です」と表示されます。つまり、無効な値を使用してオブジェクトにインデックスを付けようとしていました。 2冊の本があり、3冊目の本をくれと頼むなら、あなたは私を面白いと思うでしょう。これはあなたを面白く見ているコンピューターです。あなたは言った-「コレクションを作成する」。それでした。ただし、最初はコレクションは空です。コレクションに何もないだけでなく、何も保持するスペースがありません。 「手がありません」。

次に、「コレクションの最初の要素は 'ItemID'になりました」と言いました。そして、コンピューターは「「最初のアイテム」のためのスペースを作るように頼まれたことは一度もありません」と言います。あなたが私に与えているこのアイテムを保持する手がありません。

コードに関しては、ビューを作成しましたが、サイズを指定しませんでした。あなたには必要だ

dataGridView1.ColumnCount = 5;

列にアクセスしようとする前。変更する

DataGridView dataGridView1 = new DataGridView();

dataGridView1.Columns[0].Name = "ItemID";

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

http://msdn.Microsoft.com/en-us/library/system.windows.forms.datagridview.columncount.aspx を参照してください

22
Floris

これはどういう意味ですか?私のコードに問題はありますか

コレクションに存在しない場所またはインデックスにアクセスしていることを意味します。

これを見つけるには、この行の5列目を使用しているため、Gridviewに5列あることを確認してください

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

これが配列の要素を示す画像です。したがって、gridviewの列が、アクセスする(index + 1)より少ない場合、この例外が発生します。

enter image description here

5
Sachin

dataGridView1.Columnsはおそらく5未満の長さです。dataGridView1.Columns[4]にアクセスすると、リスト外になります。

2
meilke

このエラーは、グリッドビューでページングを有効にしている場合に発生します。グリッドからレコードを削除する場合は、このようなことをする必要があります。

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();

これが質問に答えることを願っています。

1
Kamran Binyamin