- PR -

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

投稿者投稿内容
LANVIN
大ベテラン
会議室デビュー日: 2007/03/12
投稿数: 211
投稿日時: 2007-08-27 19:43

 いつもありがとうございます。

VB2005のDataTableの行追加と行編集の
下記の文の※の部分を何とか1つの文にできないでしょうか?

というのも、セット項目が増えると同じような文を2つずつ
書かなくてはいけないからです。

行追加
row = DS.Tables("tbl").NewRow
row.Item("NO") = intNO ※
DS.Tables("tbl").Rows.Add(row)

行編集
DS.Tables("tbl").Rows(0)("NO") = intNO ※

ご教授頂ければ幸いです。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-08-27 20:50
NewRow()で返されるもの自体がDataRowだからできないこともないと思うが。
今の方がわかりやすくていい。
なんでもかんでも簡素化厨とかけっこういるけど俺らからするとうざいんだよね。
せめて関数化とかその程度にとどめておいてくれないかね。
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2007-08-27 21:29
さかもとと申します。

どうなさりたいのか良く分かりませんが、追加と更新を同時に行いたい(行の有無を判断してなかったら追加、あったら更新)ということでしょうか・・・?


_________________
------------------------------------------
拝啓、さかもとと申します♪
hei
ベテラン
会議室デビュー日: 2006/09/07
投稿数: 78
投稿日時: 2007-08-28 00:00
もしかしたら、
DataRowCollection.Add(Object[])
ですか?
よっし〜。
ベテラン
会議室デビュー日: 2007/04/17
投稿数: 89
お住まい・勤務地: 北のほうの国
投稿日時: 2007-08-28 10:45
こういうことでしょうか?

row = DS.Tables("tbl").Rows(0)
row.Item("NO") = intNO

KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-08-28 11:10
コード:
If 追加の場合 Then
    row = DS.Tables("tbl").NewRow 
    row.Item("列A") = a
    row.Item("列B") = b
    row.Item("列C") = c
    row.Item("列D") = d
    DS.Tables("tbl").Rows.Add(row) 
Else
    DS.Tables("tbl").Rows(0)("列A") = a
    DS.Tables("tbl").Rows(0)("列B") = b
    DS.Tables("tbl").Rows(0)("列C") = c
    DS.Tables("tbl").Rows(0)("列D") = d
End If


太字にした部分が似たようなコードを2回書くことになるので
嫌だというお話ですよね?
DS.Tables("tbl").Rows(0) というのは、DataRow 型ですから、
こういうまとめ方はできます。

コード:
Dim row As DataRow
If 追加の場合 Then
    row = DS.Tables("tbl").NewRow 
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

If 追加の場合 Then
   DS.Tables("tbl").Rows.Add(row) 
End If


ただ、追加かどうかを2回判定しなきゃいけないのが気になりますし、
見にくいですよね。
なので別メソッドにして

コード:
If 追加の場合 Then
    row = DS.Tables("tbl").NewRow
    SetDataToRow(row)
    DS.Tables("tbl").Rows.Add(row) 
Else
    SetDataToRow(DS.Tables("tbl").Rows(0))
End If


'どこかにこんな別メソッドを定義しておく
Private Sub SetDataToRow(ByVal row As DataRow)
    row.Item("列A") = a
    row.Item("列B") = b
    row.Item("列C") = c
    row.Item("列D") = d
End Sub


の方がよいと思います。

いずれにせよポイントとなるのは、
よっし〜。さんも書いてらっしゃるように、
DS.Tables("tbl").Rows(0) というのが DataRow 型だというところですね。
LANVIN
大ベテラン
会議室デビュー日: 2007/03/12
投稿数: 211
投稿日時: 2007-08-28 11:43
皆さん、いろいろありがとうございます。

欲しかったことは、KIさんの書かれたこと
ズバリです。

ただ If 追加の場合 Thenを
今はcomboBoxで選んだ内容で判断していますが
できれば
DS.Tables("tbl").Rows(添字の変数)が無しならば
行追加、有れば行編集としたいのですが
可能でしょうか?
よっし〜。
ベテラン
会議室デビュー日: 2007/04/17
投稿数: 89
お住まい・勤務地: 北のほうの国
投稿日時: 2007-08-28 12:48
DS.Tables("tbl").Rows.Find(key) で row の有無が確認できます。

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