質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

6471閲覧

DataGridView 行の追加時にエラーメッセージ

TEC_S

総合スコア79

DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/02/09 08:49

編集2020/02/09 08:51

前提・実現したいこと

VB.NETで、Windowsフォームアプリケーションを作成しています。
DataGridViewを使って、変則的な表を作ろうとしています。

作りたいのは、下記のような表です。

ーーーーーーーーーーーーーーーーーーーーーーー
No.| 1 | 2 | 3 | 4 | 5 | ・・・・
ーーーーーーーーーーーーーーーーーーーーーーー
値1 | 11 | 12 | 13 | 14 | 15 | ・・・・
ーーーーーーーーーーーーーーーーーーーーーーー
値2 | 21 | 22 | 23 | 24 | 25 |・・・・

ビルドは通ったのですが、DataGridViewへ追加する際に、例外メッセージが発生し、困っています。
コード上は問題ないように思うのですが・・・自分の理解が違っているのだと感じています。
よろしくお願いいたします。

発生している問題・エラーメッセージ

'インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。パラメーター名:index'

該当のソースコード

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim addlis As New List(Of List(Of String))() Dim i, j As Short Dim addf() As String = {"No", "値1", "値2"} Dim addstr(3, 10) As String For i = 0 To 3 - 1 addstr(i, 0) = addf(i) For j = 1 To 10 addstr(i, j) = j + i * 10 Next Next For i = 0 To 3 - 1 With DataGridView1 For j = 1 To 10 .Rows(i).Cells(j).Value = addstr(i, j)← ここでエラー発生 Next .Rows.Add() End With Next End Sub

試したこと

下記を参考に行の追加方法を作成
http://kchon.blog111.fc2.com/blog-entry-27.html

補足情報(FW/ツールのバージョンなど)

OS:Windows10
開発環境:VisualStudio2017

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

「インデックスが範囲を超えています。」というのは配列等の添え字の範囲外の数を指定した場合に発生します。
エラーの出る場所が

VBNET

1.Rows(i).Cells(j).Value = addstr(i, j)

とのことなので、Rows(i)もしくはCells(j)もしくはaddstr(i,j)のいづれかが範囲外となっています。
ijがいくつの時に発生しているのかデバッガで確認してください。

また、使おうとしている配列等の添え字の範囲がどうなっているのかも確認してください。

投稿2020/02/09 08:58

YAmaGNZ

総合スコア10288

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TEC_S

2020/02/09 09:09

早速、ありがとうございます。 デバッカで確認したところ、 i=0 j=1 の時に発生しています。 addstrの中には、しっかりと"1"が入っています。 そうなると、、 '.Rows(i).Cells(j).Value になると思いますが、、こちら行の追加方法が間違っているのでしょうか。。
YAmaGNZ

2020/02/09 09:42 編集

その時、行はいくつありますか?列はいくつありますか? 1行もないのに1行目(添え字0)を指定していたりしませんか? こういったことをエラーが発生した時にデバッガで確認するようにしましょう
TEC_S

2020/02/09 11:43

ご指摘、ありがとうございます。 最初に列の追加が必要だったのですね。 おかげさまで、解決に至りました。 ありがとうございました。
guest

0

自己解決

最初に列を作成後、行を追加した。

VBNET

1 Dim addlis As New List(Of List(Of String))() 2 Dim i, j As Short 3 4 Dim addf() As String = {"No", "値1", "2"} 5 Dim addstr(3, 11) As String 6 7 For i = 0 To 3 - 1 8 addstr(i, 0) = addf(i) 9 For j = 1 To 11 10 addstr(i, j) = j + (i * 10) 11 Next 12 Next 13 14 15    '指摘事項修正 16 i = 0 17 With DataGridView1 18 For j = 0 To 11 19 .Columns.Add(0, addstr(0, j)) '指摘事項修正:列は一つずつ作られる 20 21 If j = 0 Then 22 .Rows.Add() '指摘事項修正:行は1行ずつ作られる 23 .Rows.Add() 24 End If 25 26 For i = 1 To 2 27 .Rows(i - 1).Cells(j).Value = addstr(i, j) '作ってから値を入れる 28 Next 29 Next 30 End With 31 32 DataGridView1.AllowUserToAddRows = False 33 34 '作る数が正しければ、特に列・行の制御はいらない 35 'DataGridView1.RowCount = 3 36 'DataGridView1.ColumnCount = 11

投稿2020/02/09 11:42

編集2020/02/09 16:07
TEC_S

総合スコア79

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/02/09 11:50

自己解決ではありません。
YAmaGNZ

2020/02/09 13:17

列を無駄な数追加した後にColumnCountを設定してつじつまを合わせているだけですよね
TEC_S

2020/02/09 14:35

誤回答、申し訳ありません。 具体的には、どのようなことでしょうか??
YAmaGNZ

2020/02/09 14:41

Columns.Addが何回実行されているか分かりますか? そして、実際に必要な回数は分かりますか? 最終的には調整しているので大きな問題ではありませんが、明らかに必要のないものを生成して最終的に消すということをしているので、ご自身の作成されたロジックを理解していないのだろうなと思っただけです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問