31

ここに私のコードがあり、それは言う:

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

これは何を意味するのでしょうか?私のコードの問題は何ですか?

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

5 に答える 5

38

「インデックスが範囲外です」というエラーが表示されます。これは、無効な値でオブジェクトにインデックスを付けようとしたことを意味します。あなたが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を参照してください。

于 2013-10-03T14:51:18.203 に答える
25

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

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

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

例外が発生する理由は明らかですか?

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

dataGridView1.ColumnCount = 5;
于 2013-10-03T14:52:09.667 に答える
7

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

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

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

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

これは、配列の要素を示す画像です。したがって、グリッドビューに(index + 1)アクセスしている列よりも列が少ない場合、この例外が発生します。

ここに画像の説明を入力

于 2013-10-03T14:48:41.910 に答える
2

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

于 2013-10-03T14:49:34.103 に答える
1

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

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

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

于 2014-07-15T12:46:47.843 に答える