回答編集履歴

4

追記

2019/12/06 01:03

投稿

kenshirou
kenshirou

スコア772

test CHANGED
@@ -20,6 +20,8 @@
20
20
 
21
21
  ### 追加の疑問への回答
22
22
 
23
+ 本当は、別の質問としてスレッドを立てた方がよいと思いますが、ここで追加の疑問にお答えします。
24
+
23
25
  For i = 0 To...~Nextの中でClassData.Rows.RemoveAt(i)のような行削除はお勧めできません。
24
26
 
25
27
  ループ内でClassData.Rows.RemoveAt(i)を行うと、除かれたDataRowの分だけインデックスがズレます。

3

追加の疑問の回答

2019/12/06 01:03

投稿

kenshirou
kenshirou

スコア772

test CHANGED
@@ -15,3 +15,29 @@
15
15
  ClassList.Rows.Add(dr)
16
16
 
17
17
  ```
18
+
19
+
20
+
21
+ ### 追加の疑問への回答
22
+
23
+ For i = 0 To...~Nextの中でClassData.Rows.RemoveAt(i)のような行削除はお勧めできません。
24
+
25
+ ループ内でClassData.Rows.RemoveAt(i)を行うと、除かれたDataRowの分だけインデックスがズレます。
26
+
27
+ これにより、場合によってはRows(i)のDataRowが意図したものと異なるDataRowである恐れがあります。
28
+
29
+ また、ループで「For i As Integer = 0 To ClassData.Rows.Count - 1」と定義した場合、ループの途中でClassData.Rows.Countの値が変化しても、iの上限がループ開始時のまま固定になってしまうと思います。
30
+
31
+ これが「5行目(Rows(4))に行がない」エラーの理由だと思います。
32
+
33
+
34
+
35
+ 対応策は色々とあるのですが、もし、今のコードを流用したいのであれば、
36
+
37
+ 「For i As Integer = 0 To ClassData.Rows.Count - 1」の代わりに、
38
+
39
+ 「For i As Integer = ClassData.Rows.Count - 1 To 0 Step -1」
40
+
41
+ のように行を逆方向から評価することです。
42
+
43
+ これならDataRowの抜けによるズレは気にしなくて済みます。

2

誤記の修正

2019/12/06 01:00

投稿

kenshirou
kenshirou

スコア772

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ```VB
6
6
 
7
- Dim drLast as DataRow = ClassList.Rows(ClassList.Rows.Count - 1))
7
+ Dim drLast As DataRow = ClassList.Rows(ClassList.Rows.Count - 1))
8
8
 
9
9
  Dim className As String = drLast("CLASS")
10
10
 

1

誤記を修正

2019/12/05 08:08

投稿

kenshirou
kenshirou

スコア772

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  Dim dr As DataRow = ClassList.NewRow
12
12
 
13
- dr("CLASS") = "J3"
13
+ dr("CLASS") = className
14
14
 
15
15
  ClassList.Rows.Add(dr)
16
16