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