回答編集履歴
4
追記
answer
CHANGED
@@ -9,6 +9,7 @@
|
|
9
9
|
```
|
10
10
|
|
11
11
|
### 追加の疑問への回答
|
12
|
+
本当は、別の質問としてスレッドを立てた方がよいと思いますが、ここで追加の疑問にお答えします。
|
12
13
|
For i = 0 To...~Nextの中でClassData.Rows.RemoveAt(i)のような行削除はお勧めできません。
|
13
14
|
ループ内でClassData.Rows.RemoveAt(i)を行うと、除かれたDataRowの分だけインデックスがズレます。
|
14
15
|
これにより、場合によってはRows(i)のDataRowが意図したものと異なるDataRowである恐れがあります。
|
3
追加の疑問の回答
answer
CHANGED
@@ -6,4 +6,17 @@
|
|
6
6
|
Dim dr As DataRow = ClassList.NewRow
|
7
7
|
dr("CLASS") = className
|
8
8
|
ClassList.Rows.Add(dr)
|
9
|
-
```
|
9
|
+
```
|
10
|
+
|
11
|
+
### 追加の疑問への回答
|
12
|
+
For i = 0 To...~Nextの中でClassData.Rows.RemoveAt(i)のような行削除はお勧めできません。
|
13
|
+
ループ内でClassData.Rows.RemoveAt(i)を行うと、除かれたDataRowの分だけインデックスがズレます。
|
14
|
+
これにより、場合によってはRows(i)のDataRowが意図したものと異なるDataRowである恐れがあります。
|
15
|
+
また、ループで「For i As Integer = 0 To ClassData.Rows.Count - 1」と定義した場合、ループの途中でClassData.Rows.Countの値が変化しても、iの上限がループ開始時のまま固定になってしまうと思います。
|
16
|
+
これが「5行目(Rows(4))に行がない」エラーの理由だと思います。
|
17
|
+
|
18
|
+
対応策は色々とあるのですが、もし、今のコードを流用したいのであれば、
|
19
|
+
「For i As Integer = 0 To ClassData.Rows.Count - 1」の代わりに、
|
20
|
+
「For i As Integer = ClassData.Rows.Count - 1 To 0 Step -1」
|
21
|
+
のように行を逆方向から評価することです。
|
22
|
+
これならDataRowの抜けによるズレは気にしなくて済みます。
|
2
誤記の修正
answer
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
手っ取り早く前最終行の値を取得したいなら、こんな感じでしょうか?
|
2
2
|
(ClassListが空である場合はそれなりの対策をしてください。)
|
3
3
|
```VB
|
4
|
-
Dim drLast
|
4
|
+
Dim drLast As DataRow = ClassList.Rows(ClassList.Rows.Count - 1))
|
5
5
|
Dim className As String = drLast("CLASS")
|
6
6
|
Dim dr As DataRow = ClassList.NewRow
|
7
7
|
dr("CLASS") = className
|
1
誤記を修正
answer
CHANGED
@@ -4,6 +4,6 @@
|
|
4
4
|
Dim drLast as DataRow = ClassList.Rows(ClassList.Rows.Count - 1))
|
5
5
|
Dim className As String = drLast("CLASS")
|
6
6
|
Dim dr As DataRow = ClassList.NewRow
|
7
|
-
dr("CLASS") =
|
7
|
+
dr("CLASS") = className
|
8
8
|
ClassList.Rows.Add(dr)
|
9
9
|
```
|