- PR -

DataViewからテーブルにデータを追加したい(VB.NET)

投稿者投稿内容
co.jp
常連さん
会議室デビュー日: 2004/03/19
投稿数: 20
投稿日時: 2004-03-19 13:15
VB.NET 2003を最近使い始めました、.netです。
お手柔らかにお願いします。

DataViewのAddNewメソッドを使用して、テーブルにデータ行を追加をしようと思っています。
以下のようなコードでコンパイルすると、コードは通るのですが、チェックしてみるとテーブルにデータは追加されていませんでした。

どのうようにしたら、データ行をテーブルに追加するようになるのでしょうか?
よろしくお願いします。

_________________

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim int As Integer
int = Val(TextBox2.Text)
Dim table As DataTable = DataSet21.Tables("user_file")
Dim dv As DataView = table.DefaultView

dv.AllowDelete = False

Dim dvv As DataRowView = dv.AddNew()
dvv("user_name") = TextBox1.Text
dvv("shain_no") = TextBox2.Text
dvv("ps") = TextBox3.Text
dvv("section") = TextBox4.Text
dvv.EndEdit()

End Sub
End Class
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-03-19 13:22
引用:

co.jpさんの書き込み (2004-03-19 13:15) より:

DataViewのAddNewメソッドを使用して、テーブルにデータ行を追加をしようと思っています。
以下のようなコードでコンパイルすると、コードは通るのですが、チェックしてみるとテーブルにデータは追加されていませんでした。


 Viewだからです。Viewには実体がありません。「見せ方」だけです。DataTable、実体の方へ追加してください。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-03-19 13:39
NAL-6295です。

テスト的に下記のコーディングしてみたら出来ましたけどね。

コード:
        Dim Dt As DataTable
        Dim Dv As DataView
        Dt = New DataTable("TEST")
        Dt.Columns.Add("Column")
        Dv = New DataView(Dt)

        With Dv.AddNew()
            .Item("Column") = "test"
            .EndEdit()
        End With



どのタイミングで、追加されなかったということをチェックしたのでしょうか。
co.jp
常連さん
会議室デビュー日: 2004/03/19
投稿数: 20
投稿日時: 2004-03-19 14:21
引用:


どのタイミングで、追加されなかったということをチェックしたのでしょうか。




dvv.EndEdit()後でも、レコードは追加されていませんでした。

見よう見まねでNAL-6295さんのコードでコーディングしましたが、やはり結果は反映されませんでした。
何か別の問題でもあるのでしょうか。

______________________________

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


Dim r As Integer
r = Val(TextBox2.Text)

Dim dt As DataTable
Dim dv As DataView
dt = New DataTable("member")
dt.Columns.Add("user_name")
dt.Columns.Add("shain_no")
dt.Columns.Add("pass")
dt.Columns.Add("part")
dv = New DataView(dt)

With dv.AddNew
.Item("user_name") = TextBox1.Text
.Item("shain_no") = TextBox2.Text
.Item("pass") = TextBox3.Text
.Item("part") = TextBox4.Text
.EndEdit()

End With

End Sub
End Class
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-03-19 14:26
NAL-6295です。

どのように、確認しているのでしょうか。

ちなみにさっきのサンプルでは、

データテーブル.Rows.Count

でチェックしました。

ついでに言えば、通常は、Jittaさんが仰る通り、

dr as DataRow = データテーブル.NewRow
dr("***") = 値
データテーブル.Rows.Add(dr)

とデータテーブル自体に対して直接やる事が多いです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-03-19 14:35
 あ〜!大変な思い違いをしていました。ご両人に感謝!!
#ということは、あの辺で動作がおかしくなるはずだが??

引用:

基になるテーブルのデータを DataView で変更できるかどうかは、DataView の 3 つのブール値プロパティで制御されます。この 3 つのプロパティとは、AllowNew、AllowEdit、および AllowDelete です。


falseになっていませんか?(規定値はtrueです)

引用:

AllowNew が true の場合は、DataView の AddNew メソッドを使用して DataRowView を新規に作成できます。DataRowView の EndEdit メソッドが呼び出されるまでは、新規に作成された行は基になる DataTable に追加されません。


これをしていないとか?


引用元「DataView を使用したデータの変更」
co.jp
常連さん
会議室デビュー日: 2004/03/19
投稿数: 20
投稿日時: 2004-03-19 15:36
引用:

Jittaさんの書き込み (2004-03-19 14:35) より:

 基になるテーブルのデータを DataView で変更できるかどうかは、DataView の 3 つのブール値プロパティで制御されます。この 3 つのプロパティとは、AllowNew、AllowEdit、および AllowDelete です。



ここはTrueになっています。
ちなみにJittaさんが引用元としている所を参考にしてコーディングしています。

それなのに、結果が伴わないのは、別の問題があるのかもしれないですね・・・。
例えば、データベースの種類や接続方法...etc

JittaさんやNAL-6295さんがご指摘されているように、DataTableへの追加も視野に入れて、もう少しいろいろと検証します。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-03-19 15:52
 ソースを今、初めて見ました(読みました)

 もしかして、提示されているだけで、本当に終わりでしょうか?そして、『テーブルにデータは追加されていませんでした』の『テーブル』は、データベースの方でしょうか?

 もしそうなら、確かに、追加されません。データベースからDataTableに持ってくるために、SQL文を発行したと思います。だとしたら、同じくDataTableからデータベースへ持って行くために、SQL文を発行しなければならない、と思いませんか?

[ メッセージ編集済み 編集者: Jitta 編集日時 2004-03-19 15:53 ]

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