2016-04-22 23 views
0

データセット、バインディングソース、およびバインドされたコントロールで動作するインサートがどのように動作するのか混乱します。挿入用のテキストボックスに基づいてバインディングソースを更新する

シナリオを検討します。追加または更新モードのフォームがあります。更新モードは簡単で、主キーがフォームに渡され、datesetが設定され、バインディングソースがデータセットから更新されます。コードは次のようになります。

Me.DS_Edit_Phantom_Block_taPhantomBlock1.Fill(Me.DS_Edit_Phantom_Block1.PHANTOM_BLOCK, CInt(mPhntmSessionNum)) 
     bsPhantomBlock.DataSource = DS_Edit_Phantom_Block1.PHANTOM_BLOCK 

挿入物ははるかに難しいと証明されています。 next_sequence関数(私はOracleを使用しています)からプライマリキーを取得できますが、結果セットは空です。

私がしたいことは、ユーザーが必要なフォームを入力してからOKをクリックし、clickイベントでバインディングを行うことです。

私は頭や尾を作ることはできません。私は、すべての単一のコントロールを経ずに、ユーザがデータセットに戻ってくるデータ(外部キーの制約のために必要とされる)を得ることができません。

これは私が動作しないものです。外部キーの制約のためにUpdateを実行するとクラッシュするので、コントロールからデータを取得する必要があります。データセットを取得するには、手動で各データを取得する必要はありません。

Dim drvPhantomBlock As DataRowView = TryCast(Me.bsPhantomBlock.Current, DataRowView) 
    Dim drvPhantom As DataRowView = TryCast(Me.bsPhantom.Current, DataRowView) 
    If mViewAddEdit = ViewAddEditEnum.Add Then ' do this first 
     drvPhantomBlock = DirectCast(bsPhantomBlock.AddNew(), DataRowView) 
     Dim drPhantomBlock As DataRow = drvPhantomBlock.Row 
     drPhantomBlock("PHNTM_SESSION_NO") = mPhntmSessionNum 
     drPhantomBlock("PHANTOM_BLOCK_NO") = mPhntmBlockNum 
     drvPhantomBlock.EndEdit() 
     Me.DS_Edit_Phantom_Block_taPhantomBlock1.Update(DS_Edit_Phantom_Block1.PHANTOM_BLOCK) 
     bsPhantomBlock.DataSource = Me.DS_Edit_Phantom_Block_taPhantomBlock1 

答えて

0

私はあなたが何をしているのかよく分かりません。バインディングソースに行を追加する必要がある場合は、bindingsource.addnew()メソッドを使用して、バインディングソースの現在のプロパティに行をキャストします。私が使用している疑似コードは次のとおりです。 bs.AddNew()

 Dim mydv As DataRowView = bs.Current 
     Dim myrow As DataRow = mydv.Row 
     myrow(field1) = textbox1 
     myrow(field2) = textbox2 
myrow.EndEdit() 
bs.EndEdit 'not sure if its necessary 
Tableadapter.update(DS.UnderlyingTable) 
関連する問題