- PR -

GridVewで動的に指定したインデックスに行を挿入する

1
投稿者投稿内容
ベッラ
会議室デビュー日: 2009/03/10
投稿数: 11
投稿日時: 2009-03-19 10:55
お世話になります。ベッラと申します。
VB.NET&ASPでWebアプリの開発を行っております。

GridViewで指定した行にデータを挿入し一覧に表示するということを
実現したいと思っています。
(一覧に表示した時点では一覧に表示するのみでその後、
登録ボタン押下などのイベント発生時にDB更新をしたいと考えています。)

以下のようなコードで試行しましたがエラーとなってしまいうまくいきませんでした。
(InsertAtでエラーが発生してしまいます。)

-------------------------------------------------------------------------------
Dim dt As DataTable = New DataTable()
Dim dc0 As New DataColumn("項目1", GetType(Button))
dt.Columns.Add(dc0)
Dim dc1 As New DataColumn("項目2", GetType(String))
dt.Columns.Add(dc1)
Dim dc2 As New DataColumn("項目3", GetType(String))
dt.Columns.Add(dc2)

Dim dr As DataRow = dt.NewRow
dr(0) = New Button
dr(1) = test1
dr(2) = test2

dt.Rows.Add(dr)
GridView1.DataSource = dt
dt.Rows.InsertAt(dr, GridView1.SelectedIndex + 1)
-------------------------------------------------------------------------------
発生しているエラー
-------------------------------------------------------------------------------
System.ArgumentException はユーザー コードによってハンドルされませんでした。
Message="この行は既にこのテーブルに属しています。"
-------------------------------------------------------------------------------

不適切な箇所また実現可能な方法をご存知の方がおりましたら
ぜひご教授いただきたいと思います。
よろしくお願い致します。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2009-03-19 11:51
引用:
dt.Rows.Add(dr)
GridView1.DataSource = dt
dt.Rows.InsertAt(dr, GridView1.SelectedIndex + 1)

「この行は既にこのテーブルに属しています。」のエラーの原因は一度Addしたdrを再度InsertAtしているからです。
ベッラ
会議室デビュー日: 2009/03/10
投稿数: 11
投稿日時: 2009-03-19 12:07
引用:

べるさんの書き込み (2009-03-19 11:51) より:
引用:
dt.Rows.Add(dr)
GridView1.DataSource = dt
dt.Rows.InsertAt(dr, GridView1.SelectedIndex + 1)

「この行は既にこのテーブルに属しています。」のエラーの原因は一度Addしたdrを再度InsertAtしているからです。



べるさま
ご指摘ありがとうございます。
dt.Rows.Add(dr)を削除することによりエラーの発生はなくなりました。
しかし挿入したはずの行が表示されず期待する結果になりませんでした。
GridViewに表示するにはまだやるべきことがあるのでしょうか。
InsertAtメソッドを使用することによりGridViewにされると考えておりました。
お手数ですがアドバイスをよろしくお願い致します。

べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2009-03-19 14:23
GridView1.DataBind()をしていないなら、それが必要です。
ベッラ
会議室デビュー日: 2009/03/10
投稿数: 11
投稿日時: 2009-03-19 16:34
引用:

べるさんの書き込み (2009-03-19 14:23) より:
GridView1.DataBind()をしていないなら、それが必要です。



べるさま
再度のご教授ありがとうございます。

InsertAtの前にGridView1.DataBind()を追加いたしましたが以下のエラーが発生してしまいました。

------------------------------------------------------------------------------
DataSource および DataSourceID は両方とも 'GridView1' 上で定義されています。定義 のうち 1 つを削除してください。
------------------------------------------------------------------------------

度々で申し訳ありませんが対処方法をご教授いただけますでしょうか。
よろしくお願い致します。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2009-03-19 16:45
書かれていることをやってみればいいのでは?

GridView1.DataSourceID ="";//(で平気だったかな。。)

それとDataBindの前にInsertAtしないと多分表示には反映されませんよ
ベッラ
会議室デビュー日: 2009/03/10
投稿数: 11
投稿日時: 2009-03-19 16:58
引用:

べるさんの書き込み (2009-03-19 16:45) より:
書かれていることをやってみればいいのでは?

GridView1.DataSourceID ="";//(で平気だったかな。。)

それとDataBindの前にInsertAtしないと多分表示には反映されませんよ


べるさま
早速のご教授ありがとうございます。

-------------------------------------------------------------------------------
GridView1.DataSourceID = ""
GridView1.DataSource = dt
dt.Rows.InsertAt(dr, GridView1.SelectedIndex + 1)
GridView1.DataBind()
-------------------------------------------------------------------------------
ご教授いただきましたとおり上記のようにソースを修正して試行いたしましたところ
新たにエラーが発生いたしました。
「データ ソースは並べ替えをサポートしていません。」
エラーの意味を調べてどうしてエラーが発生したか確認しようと思います。
ありがとうございました。
1

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