0

挿入、編集、および削除が可能な ASP.Net / VB.Net DetailsView で、ユーザーが DetailsView の [編集] ボタンと [更新] ボタンをクリックしたときに発生するイベントをトラップしたいと考えています。

これらのイベントを VB.Net コード ビハインド ファイル内のイベント ハンドラでトラップしようとしています。

サンプルコードでその方法を教えてもらえますか?

* アップデート *

このコーディングを試みましたが、[編集] ボタンをクリックすると次のエラーが表示されます。

Unable to cast object of type 'System.Web.UI.WebControls.DetailsView' 
to type 'System.Web.UI.WebControls.DetailsViewRow'.

これは、[編集] ボタンを示すマークアップからのコーディングです。

<asp:DetailsView 
    ID="DetailsViewDetails" 
    runat="server" 
    AutoGenerateRows="False" 
    Height="50px" 
    Width="268px" 
    DataSourceID="SqlDataSourceDetails"
    DataKeyNames="ID"
    OnItemCommand="DetailsViewDetails_ItemCommand">

    <Fields>
        <asp:TemplateField ShowHeader="False">

            <EditItemTemplate>
                <asp:Button ID="ButtonUpdate" runat="server" CausesValidation="True" 
                    CommandName="Update" Text="Update"  />
                &nbsp;<asp:Button ID="ButtonCancelUpdate" runat="server" CausesValidation="False" 
                    CommandName="Cancel" Text="Cancel" />
            </EditItemTemplate>

            <InsertItemTemplate>
                <asp:Button ID="ButtonInsert" runat="server" CausesValidation="True" 
                    CommandName="Insert" Text="Insert" />
                &nbsp;<asp:Button ID="ButtonCancelInsert" runat="server" CausesValidation="False" 
                    CommandName="Cancel" Text="Cancel" />
            </InsertItemTemplate>

            <ItemTemplate>
                <asp:Button ID="ButtonEdit" runat="server" CausesValidation="False" 
                    CommandName="Edit" Text="Edit" />
                &nbsp;<asp:Button ID="ButtonNew" runat="server" CausesValidation="False" 
                    CommandName="New" Text="New" />
                &nbsp;<asp:Button ID="ButtonDelete" runat="server" CausesValidation="False" 
                    CommandName="Delete" Text="Delete" />

                    <AjaxToolKit:ConfirmButtonExtender ID="deleteButtonConfirmation" 
                        runat="server" 
                        ConfirmText='<%# "You are about to remove: " & vbcr & 
                            Eval("Forename") & vbcr & Eval("Surname") & "!!!" &
                            vbcrlf & "Are you sure you want to do this?" & vbcrlf &
                            "Clicking the OK button will delete this parent." %>'
                        Enabled="True" 
                        TargetControlID="ButtonDelete">

                    </AjaxToolKit:ConfirmButtonExtender>
            </ItemTemplate>
        </asp:TemplateField>

これは分離コード ファイルのハンドラーです。

Protected Sub DetailsViewDetails_ItemCommand(sender As Object, e As System.Web.UI.WebControls.DetailsViewCommandEventArgs)
    Dim row As DetailsViewRow = DirectCast(DirectCast(e.CommandSource, Control).NamingContainer, DetailsViewRow)

    Select Case e.CommandName
        Case "Add"

        Case "Edit"
            ' Do this when going into edit mode so changes to the panent's tuition total balance can be updated.
            '---------------------------------------------------------------------------------------------------
            dcmOriginalRegistrationFee = GetValueFromTextBoxRegistrationFee()

        Case "Delete"

    End Select
End Sub

Dim ステートメントでエラーが発生します。

4

2 に答える 2

3

イベントを処理する関数を定義します。

イベントはここにリストされています: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.detailsview_events.aspx

次に、(更新が発生する前に) 更新イベントをトラップするハンドラーを記述します。

Protected Sub detailsView1_ItemUpdating(sender As Object, e As DetailsViewUpdateEventArgs) Handles detailsView1.ItemUpdating
    'Code here
End Sub

編集するには、ModeChanging イベントをトラップします。

Protected Sub detailsView1_ModeChanging(sender As Object, e As DetailsViewUpdateEventArgs) Handles detailsView1.ModeChanging
    'You then check the new edit mode
    If e.NewMode = DetailsViewMode.Edit Then
        'Code here
    End If
End Sub

DetailsView コントロールのマークアップにハンドラーを追加することもできます。

<asp:DetailsView runat="server" ID="detailsView1" OnItemUpdating="detailsView1_ItemUpdating" OnModeChanging="detailsView1_ModeChanging">
....
</asp:DetailsView>

つまり、関数の最後にHandles detailsView1.ItemUpdatingまたはを配置する必要がなくなりました。Handles detailsView1.ModeChanging

于 2012-11-14T14:34:43.843 に答える
3

ItemCommand適切なイベントで使用できますCommandName

<asp:DetailsView ID="DetailsView1" runat="server"  
    OnItemCommand="DetailsView1_ItemCommand" 
    <Fields>
       <asp:BoundField  DataField="IdField" HeaderText="ID" />
       <asp:BoundField  DataField="NameField" HeaderText="Name" />
       <asp:ButtonField CommandName="Add" Text="Add Something" />
       <asp:ButtonField CommandName="Edit" Text="EditSomething" />
       <asp:ButtonField CommandName="Delete" Text="Delete Something" />
    </Fields>
</asp:DetailsView>

コードビハインドで:

Protected Sub DetailsView1_ItemCommand(sender As Object, e As System.Web.UI.WebControls.DetailsViewCommandEventArgs)
    Select Case e.CommandName
        Case "Add"

        Case "Edit"

        Case "Delete"

    End Select
End Sub
于 2012-11-14T14:36:14.540 に答える