- PR -

行追加と行編集を同じ文で

投稿者投稿内容
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-08-28 13:17
引用:

よっし〜。さんの書き込み (2007-08-28 12:48) より:
DS.Tables("tbl").Rows.Find(key) で row の有無が確認できます。


DataRowCollection.Find は主キー値で検索するメソッドです。
LANVINさんは「DS.Tables("tbl").Rows(添字の変数)」と書いてますから、
指定された主キーの要素ではなく、
指定されたインデックスの要素が存在するかを
確認したいのだと思います。

ということで、単純に DS.Tables("tbl").Rows.Count と比較すればよいと思います。
LANVIN
大ベテラン
会議室デビュー日: 2007/03/12
投稿数: 211
投稿日時: 2007-08-28 13:58
そうです。

「指定されたインデックスの要素が存在するかを
 確認したいのだと思います。 」

の通りです。

そこでRows.Count と比較するということなのですが
行追加したらRows.Countをストアしてある変数に
1を足していき判断するのですよね。

そして編集はカウントはそのままで。

これが良いでしょうか?







KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-08-28 15:00
引用:

LANVINさんの書き込み (2007-08-28 11:43) より:

DS.Tables("tbl").Rows(添字の変数)が無しならば
行追加、有れば行編集としたいのですが
可能でしょうか?


とのことですから、
指定されたインデックスの行が存在すればその行のデータを更新、
なければ新しく行を追加してその行にデータを格納するという意味だと思いました。
これをそのままコードにして

コード:
If i < DS.Tables("tbl").Rows.Count Then
    '更新処理
Else
    '追加処理
End If


でよいと思うのですが。
なぜ Rows.Count を変数にストアする必要があるのでしょうか?

後の質問は、DataTable に指定されたインデックスの行が存在するかどうかを
調べる方法を聞かれたのだと思いますし、それにはお答えしました。
そこから先は、ロジックの組み立て方の話だと思いますし、ご自分で考えられませんか?
ロジックの組み立て方がわからないから質問するにしても、
どういう処理がしたくて、どういうコードを書いていて、
どこが上手くいかないかを具体的に書いてくれないとアドバイスできません。
いきなり 「Rows.Count をストアしてある変数」だとか、
「編集カウント」だとか言われても、何のことだかわかりません。
LANVIN
大ベテラン
会議室デビュー日: 2007/03/12
投稿数: 211
投稿日時: 2007-08-28 15:47
KIさん、よく解りました。

最後までありがとうございました。
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2007-08-28 15:59
細かいけど
コード:
If 追加の場合 Then
   DS.Tables("tbl").Rows.Add(row) 
End If


の部分は「row.RowState」の値で判定したほうが良いと思います。
まりも
ベテラン
会議室デビュー日: 2006/08/19
投稿数: 77
投稿日時: 2007-08-28 18:25
このような方法が、最初の質問の答えとしてよいと思いました。

コード:
Dim row As DataRow
If 追加の場合 Then
    row = DS.Tables("tbl").NewRow
    DS.Tables("tbl").Rows.Add(row) 
Else
    row = DS.Tables("tbl").Rows(0)
End If
row.Item("列A") = a
row.Item("列B") = b
row.Item("列C") = c
row.Item("列D") = d



(KIさんの例示したコードの基本部分をお借りしました。)
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-08-29 06:57
いい加減、懲りてよ。(3度目)
回答者に超能力を要求しすぎ。そばにいない第三者にわかるように、書いて欲しい。
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-08-29 09:08
引用:

ゆうじゅんさんの書き込み (2007-08-28 15:59) より:
細かいけど
コード:
If 追加の場合 Then
   DS.Tables("tbl").Rows.Add(row) 
End If


の部分は「row.RowState」の値で判定したほうが良いと思います。



おっしゃるとおりです。気が付きませんでした。
これなら追加の判定条件は1回書くだけでよくなりますね。
いずれにせよ、わかりにくいので、
後者のコードの方が好きですけど…

引用:

まりもさんの書き込み (2007-08-28 18:25) より:
このような方法が、最初の質問の答えとしてよいと思いました。

コード:
Dim row As DataRow
If 追加の場合 Then
    row = DS.Tables("tbl").NewRow
    DS.Tables("tbl").Rows.Add(row) 
Else
    row = DS.Tables("tbl").Rows(0)
End If
row.Item("列A") = a
row.Item("列B") = b
row.Item("列C") = c
row.Item("列D") = d



(KIさんの例示したコードの基本部分をお借りしました。)


この方法も考えましたが、
設定する列にAllowDBNullがFalseの列が含まれる場合、
追加の場合にデータ設定前に Add してしまうと、
例外が発生すると思います。

スキルアップ/キャリアアップ(JOB@IT)