• ベストアンサー

DetailsViewで挿入後、挿入したレコードを表示

Visual Studio 2008でWebサイト作成に関する質問です。 DetailsViewコントロールでレコード挿入をおこなった場合、 挿入直後に表示される画面は、挿入レコードではなく、 挿入作業の前に表示していた既存レコードになってしまいます。 Webのユーザ(一般人)から見たら、新規作成で送信したはずの 情報がすぐ表れるのが自然であり、そうではない情報が出てくるのは心外かと思います。 DetailsViewコントロールで挿入確認ボタンを押したら、挿入レコードをすぐ表示する方法はないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.2

>参考URL見ました。けっこう複雑なんですね。 このレベル程度では、まだまだ序の口な方ですよ。 これが、AjaxやASP.NET MVC, LINQやJQueryなんかが絡んでくると もっともっと頭が痛いくらい複雑になります。 今回のケースはそれらを使っていない分、まだ良い方です。 ASP.NET標準のコントロールだけの動きのみではできないことの方が圧倒的に多いので、それらはすべてコードを書いて自力で作ることになります。今回のケースだとまだコード量は少ない方だと思います。 >そのURLに説明されているように、私も自作テーブルにおいて、自動採番形式を用いています。 >しかし、もしコード例を出してもらえるようなら出してもらえればたいへんありがたいです。 ということで、下記のサイトをご覧ください。 DetailsViewで作成したレコードを作成直後に表示する方法~主キーがIDENTITY項目の場合~ http://techbank.jp/Community/blogs/mymio/archive/2008/11/24/3378.aspx ただし、DBは、SQL Serverを前提としていますので、もし、OracleやAccessなど、他のDBを使われている場合は、またやり方が違います。 しかし、ある程度、この応用でいけるはずなので、後は自分で調べながらやって頂ければと思いますが、どうしてもわからなければ相談に乗りますので、またご連絡ください。

参考URL:
http://techbank.jp/Community/blogs/mymio/archive/2008/11/24/3378.aspx
honoka-cha
質問者

お礼

まず当方の環境を明記していませんでした。DBはSQL Server を用いています。 そのためkero_mioさんのサイトの方法はそのままで十分役立つものでした。ありがとうございます。 それからこれも後付けの情報になりますが、当方のDetailsViewページの表示は、 GridViewを用いる別ページ(別aspxファイル)からの遷移によって表示されることを想定しており、 DetailsViewにはページングを付加せず、単一レコードの表示や挿入としました。 そのため挿入後、別レコードが表示されるのはかなり奇異に感じられるものだった訳です。 いただいた回答のおかげで基本的考えはkero_mioさんの説明の通りでかつもう少し簡単な書き方にしました。 以下は自分への備忘録。 .aspxのキモ部分 <asp:TextBox ID="TextBox1"  .略. <asp:DetailsView ID="DetailsView1".略.> <Fields> .略. <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowInsertButton="True" /> </Fields> </asp:DetailsView> <asp:SqlDataSource ID="SqlDataSource1" DeleteCommand= .略. InsertCommand="INSERT INTO [Zaiko] (.略.) VALUES (.略.) SELECT @No = SCOPE_IDENTITY()" SelectCommand="SELECT .略. FROM [Zaiko] WHERE ([id] = @id)" UpdateCommand= .略. <SelectParameters> <asp:ControlParameter ControlID="TextBox1" Name="id" PropertyName="Text" Type="Int32" DefaultValue="2" /> </SelectParameters> <DeleteParameters>と <UpdateParameters>は.略. <InsertParameters> .略. <asp:Parameter Name="No" DbType="Int32" Direction="Output" /> </InsertParameters> </asp:SqlDataSource> .aspx.vbのほぼ全て Imports System.Collections.Generic Imports System.Web.UI.WebControls Imports System.Data.Common Partial Class Default22 Inherits System.Web.UI.Page Protected Sub SqlDataSource1_Inserted(.略.).略. TextBox1.Text = command.Parameters("@No").Value.ToString() End Sub End Class

その他の回答 (1)

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.1

確かに、新規作成した直後のレコードをデフォルトで表示して欲しいですよね。お気持ちはよくわかります。 さて、挿入した直後に挿入したレコードを表示するには、 ある程度、コードを書かないとできません。 下記、参考のサイトが参考になりますでしょうか? http://techbank.jp/Community/blogs/mymio/archive/2008/11/22/3354.aspx 宜しくお願いします。

参考URL:
http://techbank.jp/Community/blogs/mymio/archive/2008/11/22/3354.aspx
honoka-cha
質問者

お礼

kero_mioさん、またしても有益な回答ありがとうございます。 参考URL見ました。けっこう複雑なんですね。 私にはかなりハードルが高い内容で、読解するのにしばらく時間がかかりそうですが、挑戦してみます。 そのURLに説明されているように、私も自作テーブルにおいて、自動採番形式を用いています。自動採番の最新値を用いてそのレコードを表示できればより汎用性が高くてすっきりするようにも思います。 それについても、時間が掛かるかもしれませんが、挑戦してみます。 しかし、もしコード例を出してもらえるようなら出してもらえればたいへんありがたいです。

関連するQ&A