当前位置:编程学习 > C#/ASP.NET >>

GridView结合DetailsView中插入新记录后的问题

本人新手,最近几天跟着Wrox的.net教程敲代码,通过DetailsView实现了插入记录的功能,可插入后返回GridView,每次刷新页面都会继续执行原先DetailsView的插入操作。现在我还不是了解GridView和DetailsView的工作原理,老是出一些小问题,各位大侠能帮我看看吗?
<%@ Page Title="" Language="C#" MasterPageFile="~/Events.Master" AutoEventWireup="true" CodeBehind="EventManagement.aspx.cs" Inherits="EventRegistrationWeb.Admin.EventManagement" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    </asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolderMain" runat="server">
    <asp:GridView ID="GridView1" runat="server" AllowSorting="True" 
        AutoGenerateColumns="False" DataKeyNames="Id" DataSourceID="SqlDataSource1" 
        onrowcommand="GridView1_RowCommand">
        <Columns>
            <asp:BoundField DataField="Id" HeaderText="Id" InsertVisible="False" 
                ReadOnly="True" SortExpression="Id" Visible="False" />
            <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
            <asp:BoundField DataField="Date" HeaderText="Date" SortExpression="Date" />
            <asp:BoundField DataField="Location" HeaderText="Location" 
                SortExpression="Location" />
            <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
            <asp:ButtonField CommandName="Insert" Text="新建" />
        </Columns>
        <EmptyDataTemplate>
            <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" 
                DataKeyNames="Id" DataSourceID="SqlDataSource1" Height="50px" 
                oniteminserted="DetailsView1_ItemInserted" Width="219px">
                <Fields>
                    <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
                    <asp:BoundField DataField="Date" HeaderText="Date" SortExpression="Date" />
                    <asp:BoundField DataField="Location" HeaderText="Location" 
                        SortExpression="Location" />
                    <asp:CommandField ShowInsertButton="True" />
                </Fields>
            </asp:DetailsView>
        </EmptyDataTemplate>
    </asp:GridView>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConflictDetection="CompareAllValues" 
        ConnectionString="<%$ ConnectionStrings:BeginEventsConnectionString %>" 
        DeleteCommand="DELETE FROM [Events] WHERE [Id] = @original_Id AND [Title] = @original_Title AND [Date] = @original_Date AND [Location] = @original_Location" 
        InsertCommand="INSERT INTO [Events] ([Title], [Date], [Location]) VALUES (@Title, @Date, @Location)" 
        OldValuesParameterFormatString="original_{0}" 
        SelectCommand="SELECT [Id], [Title], [Date], [Location] FROM [Events]" 
        UpdateCommand="UPDATE [Events] SET [Title] = @Title, [Date] = @Date, [Location] = @Location WHERE [Id] = @original_Id AND [Title] = @original_Title AND [Date] = @original_Date AND [Location] = @original_Location">
        <DeleteParameters>
            <asp:Parameter Name="original_Id" Type="Int32" />
            <asp:Parameter Name="original_Title" Type="String" />
            <asp:Parameter Name="original_Date" Type="DateTime" />
            <asp:Parameter Name="original_Location" Type="String" />
        </DeleteParameters>
        <InsertParameters>
            <asp:Parameter Name="Title" Type="String" />
            <asp:Parameter Name="Date" Type="DateTime" />
            <asp:Parameter Name="Location" Type="String" />
        </InsertParameters>
        <UpdateParameters>
            <asp:Parameter Name="Title" Type="String" />
            <asp:Parameter Name="Date" Type="DateTime" />
            <asp:Parameter Name="Location" Type="String" />
            <asp:Parameter Name="original_Id" Type="Int32" />
            <asp:Parameter Name="original_Title" Type="String" />
            <asp:Parameter Name="original_Date" Type="DateTime" />
            <asp:Parameter Name="original_Location" Type="String" />
        </UpdateParameters>
    </asp:SqlDataSource>
</asp:Content>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

namespace EventRegistrationWeb.Admin
{
    public partial class EventManagement : System.Web.UI.Page
    {
        
        protected void Page_Load(object sender, EventArgs e)
        {
            
        }

        protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName=="Insert")
            {
                GridView1.DataSourceID = "";
                GridView1.DataBind();
            }
        }

        protected void DetailsView1_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
        {
            GridView1.DataSourceID = "SqlDataSource1";
            GridView1.DataBind();
        }

    }
}
--------------------编程问答-------------------- 使用Repeater控件好用,自己写灵活 --------------------编程问答-------------------- 那我去看看Repeater的用法,谢谢这位大哥!
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,