DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataSet DataView DataRowについて

環境/言語:[.NET Framework1.1]
分類:[.NET]

<環境>
【Windowsフォーム】
【VB.NET】
【.NET Framework1.1】
【VisualStudio2003】

<質問内容>
SQLデータアダプターのFillメソッドにて作成された
DataSetのDataTableへ行の追加します。
追加された行を含めDataViewで行の抽出を行い、
DataViewをDataGridへ表示をします。
このときはDataGridに表示されます。
次にDataViewに対して行の追加を行い
再度DataViewをDataGridへ表示しようとすると
DataGridは何も変化がありません。

以下が記述した内容になります。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dim Row As DataRow
Dim tbl As DataTable
Dim View as DataView
Dim ViewRow As DataRowView
    .
    .
    .
sqlDataAdapter.Fill(データセット)

tbl = データセット.Tables("テーブル名")

' 新しい行を追加
Row = tbl.NewRow()
Row(0) = "AAAAA"
    .
    .
    .
tbl.Rows.Add(Row)

' Viewで抽出
View = New DataView(データセット.Tables("テーブル名", "式" ,"ソート", DataViewRowState.CurrentRows)

' データグリッドへ表示
データグリッド.DataSource = View

' ビューへ行を追加
View.AllowNew = True
ViewRow = View.AddNew
ViewRow(0) = "BBBB"
    .
    .
    .
' 追加確定
ViewRow.EndEdit()

' データグリッドへ表示
データグリッド.DataSource = View


++++++++++++++++++++++++++++++++++++++++++++++++++++++++

データセットのRowStateの状態を確認したところ、DataTableへ追加した場合、
DataViewにて追加した場合の両者ともADDEDでした。

DataViewへ追加後DataGridに表示されないのはなぜでしょうか。。。
ご教授、または上記内容のご指摘をいただきたいと思います。

長文になってしまいましたが、なにとぞよろしくお願いします。
(私はW2k上のFW1.1の環境です。)
私の環境では問題なく動作します。
ビューに設定したフィルタは空ですか。
指定しているのでしたら、誤りはありませんか。

以下のコードはどうなります?


  Private dt As New DataTable
  Private Sub Button1_Click(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) _Handles Button1.Click

    Dim rw As DataRow
    rw = dt.NewRow
    rw("a") = "b"
    rw.EndEdit()
    Dim v As New DataView(dt, "", "", DataViewRowState.CurrentRows)

    dt.Rows.Add(rw)
    'Me.DataGrid1.DataSource = v    '対象は変わらないのでしなくても一緒。

    Dim vr As DataRowView
    vr = v.AddNew
    vr("a") = "c"
    vr.EndEdit()
    'Me.DataGrid1.DataSource = v    '対象は変わらないのでしなくても一緒。


  End Sub

  Private Sub Form1_Load(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles MyBase.Load

    dt.Columns.Add("a", System.Type.GetType("System.String"))
    Dim rw As DataRow
    rw = dt.NewRow
    rw("a") = "a"
    rw.EndEdit()
    Dim v As New DataView(dt, "", "", DataViewRowState.CurrentRows)

    dt.Rows.Add(rw)
    Me.DataGrid1.DataSource = v

  End Sub
■No7544に返信(こど。さんの記事)
> (私はW2k上のFW1.1の環境です。)
> 私の環境では問題なく動作します。
> ビューに設定したフィルタは空ですか。
> 指定しているのでしたら、誤りはありませんか。

こどさんありがとうございます。

ご指摘のとおりビューに設定していた、フィルタが
誤っていました。

単純なことなのに私にとっては盲点となっていました。

本当にありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板