Chapter 13: Detailview doesn't Update.
When I insert a review into the database, it works, but when I try to update, it doesn't. There is no error message, it just returns to the review page.
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPages/Management.master" AutoEventWireup="true" CodeFile="AddEditReviewold.aspx.cs" Inherits="Management_AddEditReview" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="cpMainSection" Runat="Server">
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataKeyNames="Id" DataSourceID="SqlDataSource1" DefaultMode="Insert" Height="50px" Width="125px" OnItemInserted="DetailsView1_ItemInserted" OnItemInserting="DetailsView1_ItemInserting" OnItemUpdated="DetailsView1_ItemUpdated" OnItemUpdating="DetailsView1_ItemUpdating">
<Fields>
<asp:TemplateField HeaderText="Title" SortExpression="Title">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Title") %>'></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="Enter a Title." ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Title") %>'></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="Enter a Title." ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Title") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Summary" SortExpression="Summary">
<EditItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("Summary") %>' TextMode="MultiLine" Width="500px" Height="100px"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="Enter a Summary." ControlToValidate="TextBox3"></asp:RequiredFieldValidator>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("Summary") %>' TextMode="MultiLine" Width="500px" Height="100px"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ErrorMessage="Enter a Summary." ControlToValidate="TextBox3"></asp:RequiredFieldValidator>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("Summary") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Body" SortExpression="Body">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Body") %>' TextMode="MultiLine" Width="500px" Height="100px"></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Body") %>' TextMode="MultiLine" Width="500px" Height="100px"></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Body") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:CheckBoxField DataField="Authorized" HeaderText="Authorized" SortExpression="Authorized" />
<asp:TemplateField HeaderText="GenreID" SortExpression="GenreID">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="GenreDataSource" DataTextField="Name" DataValueField="Id" SelectedValue='<%# Bind("GenreID") %>'></asp:DropDownList>
</EditItemTemplate>
<InsertItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="GenreDataSource" DataTextField="Name" DataValueField="Id" SelectedValue='<%# Bind("GenreID") %>'></asp:DropDownList>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# Bind("GenreID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Id" HeaderText="Id" SortExpression="Id" InsertVisible="False" ReadOnly="True" />
<asp:BoundField DataField="UpdateDateTime" HeaderText="UpdateDateTime" SortExpression="UpdateDateTime" Visible="False" />
<asp:CommandField ShowEditButton="True" ShowInsertButton="True" />
</Fields>
</asp:DetailsView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConflictDetection="CompareAllValues" ConnectionString="<%$ ConnectionStrings:PlanetWroxConnectionString1 %>" DeleteCommand="DELETE FROM [Review] WHERE [Id] = @original_Id AND [Authorized] = @original_Authorized AND [GenreID] = @original_GenreID AND (([Body] = @original_Body) OR ([Body] IS NULL AND @original_Body IS NULL)) AND [Summary] = @original_Summary AND [Title] = @original_Title AND [UpdateDateTime] = @original_UpdateDateTime" InsertCommand="INSERT INTO [Review] ([Authorized], [GenreID], [Body], [Summary], [Title], [UpdateDateTime]) VALUES (@Authorized, @GenreID, @Body, @Summary, @Title, @UpdateDateTime)" OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT [Authorized], [GenreID], [Body], [Summary], [Title], [Id], [UpdateDateTime] FROM [Review] WHERE ([Id] = @Id)" UpdateCommand="UPDATE [Review] SET [Authorized] = @Authorized, [GenreID] = @GenreID, [Body] = @Body, [Summary] = @Summary, [Title] = @Title, [UpdateDateTime] = @UpdateDateTime WHERE [Id] = @original_Id AND [Authorized] = @original_Authorized AND [GenreID] = @original_GenreID AND (([Body] = @original_Body) OR ([Body] IS NULL AND @original_Body IS NULL)) AND [Summary] = @original_Summary AND [Title] = @original_Title AND [UpdateDateTime] = @original_UpdateDateTime">
<DeleteParameters>
<asp:Parameter Name="original_Id" Type="Int32" />
<asp:Parameter Name="original_Authorized" Type="Boolean" />
<asp:Parameter Name="original_GenreID" Type="Int32" />
<asp:Parameter Name="original_Body" Type="String" />
<asp:Parameter Name="original_Summary" Type="String" />
<asp:Parameter Name="original_Title" Type="String" />
<asp:Parameter Name="original_UpdateDateTime" Type="DateTime" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="Authorized" Type="Boolean" />
<asp:Parameter Name="GenreID" Type="Int32" />
<asp:Parameter Name="Body" Type="String" />
<asp:Parameter Name="Summary" Type="String" />
<asp:Parameter Name="Title" Type="String" />
<asp:Parameter Name="UpdateDateTime" Type="DateTime" />
</InsertParameters>
<SelectParameters>
<asp:QueryStringParameter Name="Id" QueryStringField="Id" Type="Int32" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="Authorized" Type="Boolean" />
<asp:Parameter Name="GenreID" Type="Int32" />
<asp:Parameter Name="Body" Type="String" />
<asp:Parameter Name="Summary" Type="String" />
<asp:Parameter Name="Title" Type="String" />
<asp:Parameter Name="UpdateDateTime" Type="DateTime" />
<asp:Parameter Name="original_Id" Type="Int32" />
<asp:Parameter Name="original_Authorized" Type="Boolean" />
<asp:Parameter Name="original_GenreID" Type="Int32" />
<asp:Parameter Name="original_Body" Type="String" />
<asp:Parameter Name="original_Summary" Type="String" />
<asp:Parameter Name="original_Title" Type="String" />
<asp:Parameter Name="original_UpdateDateTime" Type="DateTime" />
</UpdateParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="GenreDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:PlanetWroxConnectionString1 %>" SelectCommand="SELECT [Id], [Name] FROM [Genre] ORDER BY [SortOrder]"></asp:SqlDataSource>
</asp:Content>
CODE BEHIND FILE
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Management_AddEditReview : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString.Get("Id") != null)
{
DetailsView1.DefaultMode = DetailsViewMode.Edit;
}
}
private void EndEditing()
{
Response.Redirect("Review.aspx");
}
protected void DetailsView1_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
{
if (e.Exception == null)
EndEditing();
}
protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e)
{
e.Values["UpdateDateTime"] = DateTime.Now;
}
protected void DetailsView1_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
{
if (e.Exception == null)
{
EndEditing();
}
}
protected void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
{
e.NewValues["UpdateDateTime"] = DateTime.Now;
}
}
|