回答編集履歴
4
追記
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
追加の疑問の回答
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
誤記の修正
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
```VB
|
6
6
|
|
7
|
-
Dim drLast
|
7
|
+
Dim drLast As DataRow = ClassList.Rows(ClassList.Rows.Count - 1))
|
8
8
|
|
9
9
|
Dim className As String = drLast("CLASS")
|
10
10
|
|
1
誤記を修正
test
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
Dim dr As DataRow = ClassList.NewRow
|
12
12
|
|
13
|
-
dr("CLASS") =
|
13
|
+
dr("CLASS") = className
|
14
14
|
|
15
15
|
ClassList.Rows.Add(dr)
|
16
16
|
|