プロが教えるわが家の防犯対策術!

Datatableの主キーで行取得する方法が
わからなくて困っています。

やりたいことは・・・
・DataGridの値をDataTableに反映する。
・DataTableにデータが存在するかチェックする。
・更新データを特定するために条件設定してDataTableの行取得する。
・取得した行の内容を更新してupdateをする。
※取得するデータはuniqueです。(重複なデータはない)

行取得にはFindBy<XXXX>を使いました。
主キーが1つのカラムのDatatableではできたのですが、
主キーが2つ以上のカラムのDatatableの時が
うまくいかず、やりかたもわからず困っています。

ネットで検索してもやり方が書いてないです。
(私が見る箇所を間違ってるか内容を理解してないのでしょうか?)
違う方法を考えないといけないのでしょうか?

ご教授ください。よろしくお願いします。
下記にサンプルのコードを書いておきます。

  'datatableとdatatableadapter
Public dt = New dsDB.HogeDataTable
Public da = New dsDBTableAdapters.HogeTA

Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click

Dim Row As dsDB.MgCamRow '行取得結果
Dim i As Integer

'dgHogeはDataGridです。
For i = 0 To dgHoge.Rows.Count - 1
'以下の4カラムをまとめて主キーにしています。
        '4カラムの情報を条件にします。
        'データ型はintegerです。
iRow1 = dgHoge("A", i).Value
iRow2 = dgHoge("B", i).Value
iRow3 = dgHoge("C", i).Value
iRow4 = dgHoge("D", i).Value

'※この処理をしようとしてうまくいきません。
        'どのように主キーの情報を与えるのでしょうか。
        'それとも違う方法が良いのでしょうか。
Row = dtHoge.FindByXXXX(XXXX)

Row.A = iRow1
Row.B = iRow2
Row.C = iRow3
Row.D = iRow4
Row.E = dgCam("E, i).Value
Row.F = dgCam("F, i).Value
Row.G = dgCam("G, i).Value
Next
daHoge.update(dtHoge)
End Sub

A 回答 (1件)

ウィザードが作成した FindBy主キー メソッドなら


主キーのデータを ,で区切って与えるだけなのでは ?

row = dtHoge.FindByXXX( iRow1, iRow2, iRow3, iRow4 )
といった具合で取得して

if not row Is Nothing then
などで 取得できたかどうかの判定を行いましょう
# 2005以降なら
# if row IsNot Nothing then
# といった判定も可能です

この回答への補足

すいません。
versionは2005です。

補足日時:2009/03/17 15:45
    • good
    • 0
この回答へのお礼

さっそくの回答ありがとうございます。
試してみたところ別のエラーが出ました。
FindByXXXが型HogeDataTableにないというエラーです。

XXXを主キーの名前にしています。
主キーはデザイナーのテーブル内で
主キーの編集でつくったのですが、
これがまずいのでしょうか?

回答に質問を重ねて申しわけないです。
つまらないミスをしているかもしれないので
もう少し確認してみます。

お礼日時:2009/03/17 15:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!