- - PR -
GridVewで動的に指定したインデックスに行を挿入する
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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="この行は既にこのテーブルに属しています。" ------------------------------------------------------------------------------- 不適切な箇所また実現可能な方法をご存知の方がおりましたら ぜひご教授いただきたいと思います。 よろしくお願い致します。 | ||||||||
|
投稿日時: 2009-03-19 11:51
| ||||||||
|
投稿日時: 2009-03-19 12:07
べるさま ご指摘ありがとうございます。 dt.Rows.Add(dr)を削除することによりエラーの発生はなくなりました。 しかし挿入したはずの行が表示されず期待する結果になりませんでした。 GridViewに表示するにはまだやるべきことがあるのでしょうか。 InsertAtメソッドを使用することによりGridViewにされると考えておりました。 お手数ですがアドバイスをよろしくお願い致します。 | ||||||||
|
投稿日時: 2009-03-19 14:23
GridView1.DataBind()をしていないなら、それが必要です。
| ||||||||
|
投稿日時: 2009-03-19 16:34
べるさま 再度のご教授ありがとうございます。 InsertAtの前にGridView1.DataBind()を追加いたしましたが以下のエラーが発生してしまいました。 ------------------------------------------------------------------------------ DataSource および DataSourceID は両方とも 'GridView1' 上で定義されています。定義 のうち 1 つを削除してください。 ------------------------------------------------------------------------------ 度々で申し訳ありませんが対処方法をご教授いただけますでしょうか。 よろしくお願い致します。 | ||||||||
|
投稿日時: 2009-03-19 16:45
書かれていることをやってみればいいのでは?
GridView1.DataSourceID ="";//(で平気だったかな。。) それとDataBindの前にInsertAtしないと多分表示には反映されませんよ | ||||||||
|
投稿日時: 2009-03-19 16:58
べるさま 早速のご教授ありがとうございます。 ------------------------------------------------------------------------------- GridView1.DataSourceID = "" GridView1.DataSource = dt dt.Rows.InsertAt(dr, GridView1.SelectedIndex + 1) GridView1.DataBind() ------------------------------------------------------------------------------- ご教授いただきましたとおり上記のようにソースを修正して試行いたしましたところ 新たにエラーが発生いたしました。 「データ ソースは並べ替えをサポートしていません。」 エラーの意味を調べてどうしてエラーが発生したか確認しようと思います。 ありがとうございました。 |
1