2

DatagridviewコントロールとBindingNavigatorコントロールの両方を含むフォームで問題が発生している。当初、私は次のコードを持っていました:

BS = New BindingSource(DS, dsTable)  ' (earlier code) Dim BS as New BindingSource
BNV1.BindingSource = BS     ' A BindingNavigator
DGV1.DataSource = BS        ' A DataGridView

すべてがうまく機能しましたが、新しい行を挿入すると、DataGridViewのリストの最後に表示され、正しい連続した場所に表示されるようにしたかったのです。

この問題を解決するためにDatatableでDataViewを使用することを提案する推奨事項をどこかのフォーラムで見つけました。私はそれを試しました、そしてそれはうまくいきました-ほとんど。新しいコードは次のとおりです。

BS = New BindingSource(DS, dsTable)
DV.Table = DS.Tables(dsTable)       ' (earlier code)  Dim DV as New DataView
DV.Sort = DS.Tables(dsTable).Columns(0).ColumnName
DGV1.DataSource = DV                 < ---- instead of the BindingSource 'BS'
BNV1.BindingSource = BS

新しいレコードは、正しく順序付けられた場所に正しく表示されました-しかし-DataGridViewをスクロールしても、BindingNavigatorは変更されませんでした。正しいレコード番号が反映されることはありませんでした。
ただし、BindingNavigatorのmoveNext、Previous、Start、Endの各矢印をクリックすると、カウントが正しく変更されました。DataGridViewでは何も起こりませんでしたが、BindingNavigatorが舞台裏で何か他のものを追跡していたようです。元のテーブルだったと思います。

BindingNavigatorをDataViewに同期させる方法はありますか?では、DatagridViewとBindingNavigatorは同じデータを見ているのでしょうか。

(毎回DataGridViewを補充することでこれを解決できることはわかっていますが、リソースが無駄になっているようです。)

追加情報:実際に挿入/追加を行うコード

Dim NewRow As DataRow = DT.NewRow
modCommonMaint.FillNewRow(NewRow, pnlData, dicFields)
NewRow(CntText + 1) = 0
NewRow(CntText + 2) = NewRow(0).ToString
LastAdd = txtID.Text.ToUpper.Trim
DT.Rows.Add(NewRow)
DGV1.Refresh()
Try
  DA.InsertCommand = cmdA
  DA.UpdateCommand = cmdU
  DA.Update(DS, dsTable)
Catch ex As Exception
  Console.WriteLine("Error" & ex.ToString)
Finally
End Try

これは、実際にINSERT/ADDを実行するコードです。どちらのシナリオでも変更されません。動作を変更するには、このノートの最初の2つのコードブロックの行を入れ替えるだけです。

4

0 に答える 0