dポイントプレゼントキャンペーン実施中!

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

A 回答 (2件)

>参考URL見ました。

けっこう複雑なんですね。

このレベル程度では、まだまだ序の口な方ですよ。
これが、AjaxやASP.NET MVC, LINQやJQueryなんかが絡んでくると
もっともっと頭が痛いくらい複雑になります。
今回のケースはそれらを使っていない分、まだ良い方です。

ASP.NET標準のコントロールだけの動きのみではできないことの方が圧倒的に多いので、それらはすべてコードを書いて自力で作ることになります。今回のケースだとまだコード量は少ない方だと思います。

>そのURLに説明されているように、私も自作テーブルにおいて、自動採番形式を用いています。
>しかし、もしコード例を出してもらえるようなら出してもらえればたいへんありがたいです。

ということで、下記のサイトをご覧ください。

DetailsViewで作成したレコードを作成直後に表示する方法~主キーがIDENTITY項目の場合~
http://techbank.jp/Community/blogs/mymio/archive …

ただし、DBは、SQL Serverを前提としていますので、もし、OracleやAccessなど、他のDBを使われている場合は、またやり方が違います。
しかし、ある程度、この応用でいけるはずなので、後は自分で調べながらやって頂ければと思いますが、どうしてもわからなければ相談に乗りますので、またご連絡ください。

参考URL:http://techbank.jp/Community/blogs/mymio/archive …
    • good
    • 0
この回答へのお礼

まず当方の環境を明記していませんでした。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

お礼日時:2008/12/21 23:28

確かに、新規作成した直後のレコードをデフォルトで表示して欲しいですよね。

お気持ちはよくわかります。

さて、挿入した直後に挿入したレコードを表示するには、
ある程度、コードを書かないとできません。
下記、参考のサイトが参考になりますでしょうか?
http://techbank.jp/Community/blogs/mymio/archive …

宜しくお願いします。

参考URL:http://techbank.jp/Community/blogs/mymio/archive …
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/11/23 20:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!