【问题标题】:ASP.NET 4.5 GridView and DetailsViewASP.NET 4.5 GridView 和 DetailsView
【发布时间】:2014-01-05 15:03:47
【问题描述】:

我正在尝试使用 Murach 的 ASP.NET 4.5 使用 C# 2012 进行 Web 编程的第 15 章练习。

这是我的问题。

网页左侧有Grid View,右侧有Details View。

当我从 DetailViews 将 Ahmed 更新为 Ahmad 时,

更新不会反映在 GridView 中。

我必须转到下一页,然后返回上一页

为了显示更新。

我想知道是否有任何解决方案。

感谢您的帮助!

顺便说一下,代码是从书里抄来的。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Chapter 15: Customer Maintenance</title>
    <link href="Main.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <header>
        <img src="Images/banner.jpg" "Halloween Store" />
    </header>
    <section>
    <form id="form1" runat="server">
        <div id="gridview">
            <asp:GridView ID="GridView1" runat="server" AllowPaging="True"
                DataKeyNames="Email" DataSourceID="SqlDataSource1"
                SelectedIndex="0"
                AutoGenerateColumns="False" CellPadding="4" GridLines="None" 
                ForeColor="Black" Width="320px" >
                <Columns>
                    <asp:BoundField DataField="Email" HeaderText="Email"
                        ReadOnly="True" Visible="False">
                    </asp:BoundField>
                    <asp:BoundField DataField="LastName" HeaderText="LastName">
                        <HeaderStyle HorizontalAlign="Left" />
                        <ItemStyle Width="150px" />
                    </asp:BoundField>
                    <asp:BoundField DataField="FirstName" HeaderText="FirstName">
                        <HeaderStyle HorizontalAlign="Left" />
                        <ItemStyle Width="120px" />
                    </asp:BoundField>
                    <asp:CommandField ButtonType="Button" ShowSelectButton="True" />
                </Columns>
                <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
                <RowStyle BackColor="White" ForeColor="Black" />
                <AlternatingRowStyle BackColor="#E3EAEB" ForeColor="Black" />
                <SelectedRowStyle BackColor="#F46D11" ForeColor="White" />
                <PagerSettings Mode="NextPreviousFirstLast" />
                <PagerStyle BackColor="#1C5E55" ForeColor="White"
                    HorizontalAlign="Center" />
            </asp:GridView>

            <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:HalloweenConnectionString %>" 
                OldValuesParameterFormatString ="original_{0}"

                ConflictDetection="CompareAllValues" 

                DeleteCommand="DELETE FROM [Customers] 
                WHERE [Email] = @original_Email 
                AND [LastName] = @original_LastName 
                AND [FirstName] = @original_FirstName 
                AND [Address] = @original_Address            
                AND [City] = @original_City             
                AND [State] = @original_State             
                AND [ZipCode] = @original_ZipCode             
                AND [PhoneNumber] = @original_PhoneNumber"



InsertCommand="INSERT INTO [Customers] ([Email], [LastName], [FirstName], [Address], [City], [State], [ZipCode], [PhoneNumber]) 

                VALUES (@Email, @LastName, @FirstName, @Address, @City, @State, @ZipCode, @PhoneNumber)"

SelectCommand="SELECT [Email], [LastName], [FirstName], [Address], [City], [State], [ZipCode], [PhoneNumber]
                FROM [Customers] WHERE ([Email] = @Email)"

UpdateCommand="UPDATE [Customers] SET [Email] = @Email, 
                [LastName] = @LastName,
                [FirstName]= @FirstName,
                [Address] = @Address, [City] = @City, [State] = @State, [ZipCode] = @ZipCode, 
                [PhoneNumber] = @PhoneNumber
                WHERE [Email] = @original_Email 

                AND [LastName] = @original_LastName 

                AND [FirstName] = @original_FirstName

                AND [Address] = @original_Address AND [City] = @original_City AND [State] = @original_State AND [ZipCode] = @original_ZipCode 

                AND [PhoneNumber] = @original_PhoneNumber">


<SelectParameters>
<asp:ControlParameter ControlID="GridView1" Name="Email" PropertyName="SelectedValue" Type="String"/>
</SelectParameters>

<DeleteParameters>
<asp:Parameter Name="original_Email" Type="String" />
<asp:Parameter Name="original_LastName" Type="String" />
<asp:Parameter Name="original_FirstName" Type="String" />
<asp:Parameter Name="original_Address" Type="String" />
<asp:Parameter Name="original_City" Type="String" />
<asp:Parameter Name="original_State" Type="String" />
<asp:Parameter Name="original_ZipCode" Type="String" />
<asp:Parameter Name="original_PhoneNumber" Type="String" />

</DeleteParameters>
<UpdateParameters>


<asp:Parameter Name="Email" Type="String" />
<asp:Parameter Name="LastName" Type="String" />
<asp:Parameter Name="FirstName" Type="String" />
<asp:Parameter Name="Address" Type="String" />
<asp:Parameter Name="City" Type="String" />
<asp:Parameter Name="State" Type="String" />
<asp:Parameter Name="ZipCode" Type="String" />
<asp:Parameter Name="PhoneNumber" Type="String" />

<asp:Parameter Name="original_Email" Type="String" />
<asp:Parameter Name="original_LastName" Type="String" />
<asp:Parameter Name="original_FirstName" Type="String" />
<asp:Parameter Name="original_Address" Type="String" />
<asp:Parameter Name="original_City" Type="String" />
<asp:Parameter Name="original_State" Type="String" />
<asp:Parameter Name="original_ZipCode" Type="String" />
<asp:Parameter Name="original_PhoneNumber" Type="String" />

</UpdateParameters>


<InsertParameters>

<asp:Parameter Name="Email" Type="String" />
<asp:Parameter Name="LastName" Type="String" />
<asp:Parameter Name="FirstName" Type="String" />

<asp:Parameter Name="Address" Type="String" />
<asp:Parameter Name="City" Type="String" />
<asp:Parameter Name="State" Type="String" />
<asp:Parameter Name="ZipCode" Type="String" />
<asp:Parameter Name="PhoneNumber" Type="String" />

</InsertParameters>







                </asp:SqlDataSource>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server"
                ConnectionString="<%$ ConnectionStrings:HalloweenConnectionString %>"
                SelectCommand="SELECT [Email], [LastName], [FirstName] 
                               FROM [Customers] ORDER BY [LastName]">
            </asp:SqlDataSource>
        </div>
        <div id="detailsview">
            <asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="363px" AutoGenerateRows="False" DataKeyNames="Email" DataSourceID="SqlDataSource2" style="margin-left: 0px">
                <Fields>

                    <asp:TemplateField HeaderText="Email">

                        <ItemTemplate>

                            <asp:Label ID="lblEmailIT" runat="server" Text='<%# Bind("Email") %>'> 

                            </asp:Label>

                        </ItemTemplate>

                        <EditItemTemplate>
                            <asp:TextBox ID="lblEmailET" runat="server" Text='<%# Bind("Email") %>'>
                                </asp:TextBox>

                        </EditItemTemplate>

                        <InsertItemTemplate>
                            <asp:TextBox ID="txtEmailInT" runat="server" Text='<%# Bind("Email") %>'>
                            </asp:TextBox>

                            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtEmailInT" ErrorMessage="Email is a required field.">

                            </asp:RequiredFieldValidator>


                        </InsertItemTemplate>

                        <HeaderStyle HorizontalAlign="Left" Width="100px" />
                        <ItemStyle Width="200px" />

                    </asp:TemplateField>



                    <asp:TemplateField HeaderText="LastName">

                        <ItemTemplate>

                            <asp:Label ID="lblLastNameIT" runat="server" Text='<%# Bind("LastName") %>'> 

                            </asp:Label>

                        </ItemTemplate>

                        <EditItemTemplate>
                            <asp:TextBox ID="lblLastNameET" runat="server" Text='<%# Bind("LastName") %>'>
                                </asp:TextBox>

                        </EditItemTemplate>

                        <InsertItemTemplate>
                            <asp:TextBox ID="lblLastNameInT" runat="server" Text='<%# Bind("LastName") %>'>
                            </asp:TextBox>

                        </InsertItemTemplate>

                        <HeaderStyle HorizontalAlign="Left" Width="100px" />
                        <ItemStyle Width="200px" />

                    </asp:TemplateField>


                     <asp:TemplateField HeaderText="FirstName">

                        <ItemTemplate>

                            <asp:Label ID="lblFirstNameIT" runat="server" Text='<%# Bind("FirstName") %>'> 

                            </asp:Label>

                        </ItemTemplate>

                        <EditItemTemplate>
                            <asp:TextBox ID="lblFirstNameET" runat="server" Text='<%# Bind("FirstName") %>'>
                                </asp:TextBox>

                        </EditItemTemplate>

                        <InsertItemTemplate>
                            <asp:TextBox ID="lblFirstNameInT" runat="server" Text='<%# Bind("FirstName") %>'>
                            </asp:TextBox>

                        </InsertItemTemplate>

                        <HeaderStyle HorizontalAlign="Left" Width="100px" />
                        <ItemStyle Width="200px" />

                    </asp:TemplateField>


                    <asp:TemplateField HeaderText="Address">

                        <ItemTemplate>

                            <asp:Label ID="lblAddressIT" runat="server" Text='<%# Bind("Address") %>'> 

                            </asp:Label>

                        </ItemTemplate>

                        <EditItemTemplate>
                            <asp:TextBox ID="lblAddressET" runat="server" Text='<%# Bind("Address") %>'>
                                </asp:TextBox>

                        </EditItemTemplate>

                        <InsertItemTemplate>
                            <asp:TextBox ID="lblAddressInT" runat="server" Text='<%# Bind("Address") %>'>
                            </asp:TextBox>

                        </InsertItemTemplate>

                        <HeaderStyle HorizontalAlign="Left" Width="100px" />
                        <ItemStyle Width="200px" />

                    </asp:TemplateField>




                    <asp:TemplateField HeaderText="City">

                        <ItemTemplate>

                            <asp:Label ID="lblCityIT" runat="server" Text='<%# Bind("City") %>'> 

                            </asp:Label>

                        </ItemTemplate>

                        <EditItemTemplate>
                            <asp:TextBox ID="lblCityET" runat="server" Text='<%# Bind("City") %>'>
                                </asp:TextBox>

                        </EditItemTemplate>

                        <InsertItemTemplate>
                            <asp:TextBox ID="lblCityInT" runat="server" Text='<%# Bind("City") %>'>
                            </asp:TextBox>

                        </InsertItemTemplate>

                        <HeaderStyle HorizontalAlign="Left" Width="100px" />
                        <ItemStyle Width="200px" />

                    </asp:TemplateField>




                    <asp:TemplateField HeaderText="State">

                        <ItemTemplate>

                            <asp:Label ID="lblStateIT" runat="server" Text='<%# Bind("State") %>'> 

                            </asp:Label>

                        </ItemTemplate>

                        <EditItemTemplate>
                            <asp:TextBox ID="lblStateET" runat="server" Text='<%# Bind("State") %>'>
                                </asp:TextBox>

                        </EditItemTemplate>

                        <InsertItemTemplate>
                            <asp:TextBox ID="lblStateInT" runat="server" Text='<%# Bind("State") %>'>
                            </asp:TextBox>

                        </InsertItemTemplate>

                        <HeaderStyle HorizontalAlign="Left" Width="100px" />
                        <ItemStyle Width="200px" />

                    </asp:TemplateField>



                    <asp:TemplateField HeaderText="ZipCode">

                        <ItemTemplate>

                            <asp:Label ID="lblZipCodeIT" runat="server" Text='<%# Bind("ZipCode") %>'> 

                            </asp:Label>

                        </ItemTemplate>

                        <EditItemTemplate>
                            <asp:TextBox ID="lblZipCodeET" runat="server" Text='<%# Bind("ZipCode") %>'>
                                </asp:TextBox>

                        </EditItemTemplate>

                        <InsertItemTemplate>
                            <asp:TextBox ID="lblZipCodeInT" runat="server" Text='<%# Bind("ZipCode") %>'>
                            </asp:TextBox>

                        </InsertItemTemplate>

                        <HeaderStyle HorizontalAlign="Left" Width="100px" />
                        <ItemStyle Width="200px" />

                    </asp:TemplateField>


                    <asp:TemplateField HeaderText="PhoneNumber">

                        <ItemTemplate>

                            <asp:Label ID="lblPhoneNumberIT" runat="server" Text='<%# Bind("PhoneNumber") %>'> 

                            </asp:Label>

                        </ItemTemplate>

                        <EditItemTemplate>
                            <asp:TextBox ID="lblPhoneNumberET" runat="server" Text='<%# Bind("PhoneNumber") %>'>
                                </asp:TextBox>

                        </EditItemTemplate>

                        <InsertItemTemplate>
                            <asp:TextBox ID="lblPhoneNumberInT" runat="server" Text='<%# Bind("PhoneNumber") %>'>
                            </asp:TextBox>

                        </InsertItemTemplate>

                        <HeaderStyle HorizontalAlign="Left" Width="100px" />
                        <ItemStyle Width="200px" />

                    </asp:TemplateField>


                    <asp:CommandField ButtonType="Button" ShowDeleteButton="true" ShowEditButton="true" ShowInsertButton="true" />

                </Fields>
            </asp:DetailsView>
            <asp:ValidationSummary ID="ValidationSummary1" runat="server" 
                HeaderText="Please correct the following errors:" CssClass="error" />
            <p>
                <asp:Label ID = "lblError" runat="server" EnableViewState="False" CssClass="error">
                </asp:Label>
            </p>
        </div>
    </form>
    </section>
</body>
</html>

【问题讨论】:

    标签: asp.net gridview detailsview


    【解决方案1】:

    是的,在你的Page_Load方法下的后面代码中插入

    if(!Page.IsPostBack)
    {
       GridView1.DataBind();
    }
    

    【讨论】:

    • 作为解释,它的作用是告诉 GridView 转到其 DataSource 并重新查询信息。然后将结果信息显示在 GridView 中。由于您在 Page_Load 方法上执行此操作,因此每次加载页面时都会运行此代码,无论是从第一次加载还是回发。但是您不需要在非回发上运行它,因此需要使用 If 语句。
    【解决方案2】:

    您必须在此事件中使用此事件才能绑定 Gridview 并重定向同一页面,您的数据将反映在您的 Gridview 上 希望这将有助于尝试这个....

    protected void DetailsView1_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e) { 如果(e.AffectedRows == 1) { GridView1.DataBind(); Response.Redirect("Yourpage.aspx"); } }

    【讨论】:

    • 它正在工作。谢谢你,阿伦。你恢复了我的信仰。
    猜你喜欢
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    相关资源
    最近更新 更多