VB.Net コード ビハインド ファイルを使用して ASP.Net DetailsView を使用しています。ユーザーが [編集] ボタンをクリックしてから [更新] ボタンをクリックできるようにすることで、ユーザーが DetailsView で変更を編集および保存できるようにしようとしています。
ユーザーが [編集] ボタンをクリックしても何も起こらないため、[編集] ボタンの OnClick ハンドラーを追加しました。DetailsView は編集モードになりますが、ユーザーが [編集] ボタンを 2 回クリックした場合のみです。(おそらく ASP.Net のバグでしょうか?)
DetailsView が編集モードになると、[更新] ボタンと [キャンセル] ボタンが期待どおりに表示されますが、ユーザーがこれらのボタンのいずれかをクリックしても何も起こりません。DetailsView を強制的に更新するために [更新] ボタンに OnClick を配置しましたが、.ChangeMode(DetailsViewMode. の唯一の選択肢は Edit、Insert、ReadOnly です。
また、特別な処理を実行する必要がない限り、DetailsViews に追加の OnClicks は必要ないと考えました。
DetailsView のマークアップは次のとおりです。
<asp:DetailsView
ID="DetailsView"
runat="server"
Height="50px"
Width="218px" AutoGenerateRows="False">
<Fields>
<asp:TemplateField ShowHeader="False">
<EditItemTemplate>
<asp:Button ID="ButtonUpdate" runat="server" CausesValidation="True"
CommandName="Update" Text="Update" OnClick="ButtonUpdate_Click" />
<asp:Button ID="ButtonCancelUpdate" runat="server" CausesValidation="False"
CommandName="Cancel" Text="Cancel" />
</EditItemTemplate>
<ItemTemplate>
<asp:Button ID="ButtonEdit" runat="server" CausesValidation="False"
CommandName="Edit" Text="Edit" OnClick="ButtonEdit_Click"/>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Forename" HeaderText="First Name:" />
</Fields>
</asp:DetailsView>
コード ビハインド ファイルのコーディングは次のとおりです。
Public Class StudentDetailsMaintenance
Inherits System.Web.UI.Page
Dim theTableAdapter As New DataSetSingleStudentTableAdapters.StudentsMaintenanceTableAdapter
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
' Load the data from the database into the DetailsView.
'------------------------------------------------------
DetailsView.DataSource = theTableAdapter.GetDataByStudentID(StudentMaintenance.IntStudentID)
DetailsView.DataBind()
End Sub
Protected Sub ButtonEdit_Click(sender As Object, e As EventArgs)
' Place the DetailsView into Edit mode.
'--------------------------------------
DetailsView.ChangeMode(DetailsViewMode.Edit)
End Sub
Protected Sub ButtonUpdate_Click(sender As Object, e As EventArgs)
' Place the DetailsView into Update mode.
'----------------------------------------
DetailsView.ChangeMode(DetailsViewMode.)
End Sub
End Class
DetailsView を取得して更新を行う方法がわからないため、ButtonUpdate_Click ルーチンは不完全です。
追記: マークアップで DataSource を設定せずに DetailsView を実行しようとするのはこれが初めてです。その代わりに、DataSet デザイナーで作成された DataSet TableAdapter からのデータを使用しています。
マークアップですべて DataSource と共に DetailsView を実行した場合、[編集] ボタンと [更新] ボタンは問題なく機能します。また、可能であれば余分なコーディングを排除するためにこれを行っていました。