4

基本上,发生更新事件后,GridView 不会显示更新的值。我搜索了论坛并看到了许多解决方案,但是当我尝试它们时没有任何效果。

数据库肯定会更新,但只有在我重新启动项目后才能看到更新。

我做了什么:

  • 非常自由地使用 GridView1.Databind();
  • GridView1.Databind() 的保守使用;
  • Page_Load 包含带有 GridView1.Databind() 的 (!IsPostBack) 包装器;
  • 放置 GridView1.Databind(); 在 GridView1_RowUpdating 事件中。
  • ...以及我在搜索论坛后尝试的其他一些事情。

C#:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Text;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using System.IO;

public partial class Styles_ConsolidatedProducers : System.Web.UI.Page
{

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    GridView1.DataBind();
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        GridView1.DataBind();
    }
    else
    {
        //GridView1.DataBind();
    }
}

public override void VerifyRenderingInServerForm(Control control)
{
    /* Verifies that the control is rendered */
}

protected void Gridview1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.PageIndex = e.NewPageIndex;
    GridView1.DataBind();
}
protected void cmdReset_Click(object sender, EventArgs e)
{

    ToggleCheckState(false);
    cboBusinessSource.ClearSelection();
    cboConsolidatedProducer.ClearSelection();
    cboRelinkToConsolidatedProducer.ClearSelection();
    txtSearch.Text = "";
    lblRelinkToConsolidatedProducer.Visible = false;
    cboRelinkToConsolidatedProducer.Visible = false;
    cmdRelink.Visible = false;
    GridView1.DataBind();

}
protected void cboConsolidatedProducer_SelectedIndexChanged(object sender, EventArgs e)
{
    //GridView1.DataBind();
}
protected void cboBusinessSource_SelectedIndexChanged(object sender, EventArgs e)
{
    //GridView1.DataBind();
}

protected void cmdUnlink_Click(object sender, EventArgs e)

{
    {
        bool atLeastOneRowUpdated = false;
        // Iterate through the Products.Rows property
        foreach (GridViewRow row in GridView1.Rows)
        {
            // Access the CheckBox
            CheckBox cb = (CheckBox)row.FindControl("chkUpdate");
            if (cb != null && cb.Checked)
            {
                // Edit row is true.
                atLeastOneRowUpdated = true;
                // Get the MasterID for the selected row.
                int MasterID = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Value);

                SqlConnection con = new SqlConnection("FOO");
                con.Open();

                string updateSQL = "UPDATE tblMasterDetail " + "SET     ProducerConsolidatedID = @ProducerConsolidatedID, ProducerConsolidatedName = @ProducerConsolidatedName WHERE MasterID = @MasterID";
                Console.WriteLine(updateSQL);
                SqlCommand cmd = new SqlCommand(updateSQL, con);
                cmd.Parameters.Add("@MasterID", SqlDbType.Int, 10, "MasterID");
                cmd.Parameters.Add("@ProducerConsolidatedID", SqlDbType.NVarChar, 20, "ProducerConsolidatedID");
                cmd.Parameters.Add("@ProducerConsolidatedName", SqlDbType.NVarChar, 20, "ProducerConsolidatedName");
                //cmd.Parameters["@ProducerConsolidatedID"].Value = MasterID;
                cmd.Parameters["@MasterID"].Value = MasterID;
                cmd.Parameters["@ProducerConsolidatedID"].Value = "XX";
                cmd.Parameters["@ProducerConsolidatedName"].Value = "XX";
                //Update the row.
                cmd.ExecuteNonQuery();
                GridView1.DataBind();
                con.Close();
                ToggleCheckState(false);
                lblUpdatedRecords.Text += string.Format(
                    "Record unlinked: {0}<br />", MasterID);
                //"This would have updated ProductID {0}<br />", MasterID);
            }
        }
        // Show the Label if at least one row was deleted...
        lblUpdatedRecords.Visible = atLeastOneRowUpdated;
    }
}

private void ToggleCheckState(bool checkState)
{
    // Iterate through the Products.Rows property
    foreach (GridViewRow row in GridView1.Rows)
    {
        // Access the CheckBox
        CheckBox cb = (CheckBox)row.FindControl("chkUpdate");
        if (cb != null)
            cb.Checked = checkState;
    }
}

protected void cmdUncheckAll_Click(object sender, EventArgs e)
{
    ToggleCheckState(false);
    cboRelinkToConsolidatedProducer.Visible = false;
    lblRelinkToConsolidatedProducer.Visible = false;
    cmdRelink.Visible = false;
}
protected void txtSearch_TextChanged(object sender, EventArgs e)
{
    //GridView1.DataBind();
}

protected void cboRelinkToConsolidatedProducer_SelectedIndexChanged(object sender, EventArgs e)
{
    // Get value form dropdown.
    txtRelinkToConsolidatedProducerID.Text = cboRelinkToConsolidatedProducer.SelectedItem.Value;
    // Get value form dropdown.
    txtRelinkToConsolidatedProducerName.Text = cboRelinkToConsolidatedProducer.SelectedItem.Text;
    cmdRelink.Visible = true;
    //GridView1.DataBind();
}
protected void cmdRelinkTo_Click(object sender, EventArgs e)
{
    lblRelinkToConsolidatedProducer.Visible = true;
    cboRelinkToConsolidatedProducer.Visible = true;
}
protected void cmdRelink_Click(object sender, EventArgs e)
{
    bool atLeastOneRowUpdated = false;
    // Iterate through the Products.Rows property
    foreach (GridViewRow row in GridView1.Rows)
    {
        // Access the CheckBox
        CheckBox cb = (CheckBox)row.FindControl("chkUpdate");
        if (cb != null && cb.Checked)
        {
            // Edit row is true.
            atLeastOneRowUpdated = true;
            // Get the MasterID for the selected row.
            int MasterID = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Value);

            SqlConnection con = new SqlConnection("FOO");
            //con.Open();

            string updateSQL = "UPDATE tblMasterDetail " + "SET ProducerConsolidatedID = @ProducerConsolidatedID, ProducerConsolidatedName = @ProducerConsolidatedName WHERE MasterID = @MasterID";
            Console.WriteLine(updateSQL);
            SqlCommand cmd = new SqlCommand(updateSQL, con);
            cmd.Parameters.Add("@MasterID", SqlDbType.Int, 10, "MasterID");
            cmd.Parameters.Add("@ProducerConsolidatedID", SqlDbType.NVarChar, 20, "ProducerConsolidatedID");
            cmd.Parameters.Add("@ProducerConsolidatedName", SqlDbType.NVarChar, 20, "ProducerConsolidatedName");
            cmd.Parameters["@MasterID"].Value = MasterID;
            cmd.Parameters["@ProducerConsolidatedID"].Value = txtRelinkToConsolidatedProducerID.Text; 
            cmd.Parameters["@ProducerConsolidatedName"].Value = txtRelinkToConsolidatedProducerName.Text;
            con.Open();
            //Update the row.
            cmd.ExecuteNonQuery();
            GridView1.DataBind();
            con.Close();
            ToggleCheckState(false);
            lblUpdatedRecords.Text += string.Format(
                "Records relinked: {0}<br />", MasterID);
            //"This would have updated ProductID {0}<br />", MasterID);
            cboRelinkToConsolidatedProducer.Visible = false;
            lblRelinkToConsolidatedProducer.Visible = false;
            cmdRelink.Visible = false;
        }
    }
    // Show the Label if at least one row was deleted...
    lblUpdatedRecords.Visible = atLeastOneRowUpdated;
}

protected void cmdRefresh_Click(object sender, EventArgs e)
{
    GridView1.DataBind();
}

}

标记:

<%@ Page Language="C#" AutoEventWireup="true" Debug="true"     EnableEventValidation="true" CodeFile="Search.aspx.cs" Inherits="Styles_ConsolidatedProducers"
EnableViewStateMac ="false" EnableSessionState="True" ValidateRequest ="false" ViewStateEncryptionMode ="Never" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Producer Search</title>
<style type="text/css">
    .style1
    {
        font-family: Calibri;
    }
    .style2
    {
        color: #FFFFFF;
    }
    .style3
    {
        font-size: xx-large;
    }
    #form1
    {
        font-family: Calibri;
    }
</style>
</head>
<body>
<form id="form1" runat="server">
<div style="background-color: #000000; width: 1251px;">

    <asp:Image ID="Image1" runat="server" Height="63px" ImageAlign="Left" 
        ImageUrl="~/BM.jpg" Width="93px" />
    <br />
    <span class="style1">
    <span class="style2"><span class="style3">search</span></span></span><br 
        class="style3" />
    <span class="style1"><span class="style2">
    <br />
    </span></span>&nbsp;
    <asp:Label ID="lblConsolidatedProducer" runat="server" style="color: #FFFFFF" 
        Text="Consol. Producer:"></asp:Label>
    <asp:DropDownList ID="cboConsolidatedProducer" AppendDataBoundItems="true" runat="server" 
        AutoPostBack="True" DataSourceID="ConsolidatedProducer" 
        DataTextField="ProducerConsolidatedName" 
        DataValueField="ProducerConsolidatedID" Height="22px" Width="259px" 
        onselectedindexchanged="cboConsolidatedProducer_SelectedIndexChanged">
        <asp:ListItem Value="%" Selected="True">None</asp:ListItem>
        <asp:ListItem Value="XX">Unlinked</asp:ListItem>
    </asp:DropDownList>
    <span class="style1">
    <asp:Label ID="lblBusinessSource" runat="server" style="color: #FFFFFF" 
        Text="Source:"></asp:Label>
    </span>
    <asp:DropDownList ID="cboBusinessSource" AppendDataBoundItems="true" 
        runat="server" AutoPostBack="True" 
        DataSourceID="BusinessSource" DataTextField="BusinessSourceCode" 
        DataValueField="BusinessSourceCode" Height="22px" Width="65px" 
        onselectedindexchanged="cboBusinessSource_SelectedIndexChanged">
        <asp:ListItem Value="%" Selected="True">All</asp:ListItem>
        </asp:DropDownList>
    <asp:Label ID="lblSearch" runat="server" style="color: #FFFFFF" 
    Text="Producer Name:"></asp:Label>
    <asp:TextBox ID="txtSearch" runat="server" 
        ontextchanged="txtSearch_TextChanged" AutoCompleteType="Disabled" 
        AutoPostBack="True" MaxLength="50"></asp:TextBox>
    <asp:SqlDataSource ID="BusinessSource" runat="server" 
        ConnectionString="<%$ ConnectionStrings:BMBESQLConnectionString %>" 
        SelectCommand="SELECT DISTINCT [BusinessSourceCode] FROM [tblMasterDetail] WHERE ([BusinessSourceCode] IS NOT NULL)" 
        CancelSelectOnNullParameter="False">
    </asp:SqlDataSource>
<asp:SqlDataSource ID="MasterDetail" runat="server" 
    ConnectionString="<%$ ConnectionStrings:BMBESQLConnectionString %>" 
    SelectCommand="SELECT MasterID, SystemSourceCode, BusinessSourceCode, PRODUCERMASTERID, PRODUCERCONSOLIDATEDID, ProducerConsolidatedName, GWP, FINMISNATIONALCODE, PRODUCERNATIONALCODE, PRODUCERNAME, [Update] FROM tblMasterDetail" EnableCaching="True"
    FilterExpression="[ProducerConsolidatedID] LIKE '{0}%' and [BusinessSourceCode] LIKE '{1}%' and [ProducerName] Like '%{2}%'" 
    CancelSelectOnNullParameter="False" 
    OldValuesParameterFormatString="original_{0}" 
    InsertCommand="INSERT INTO [tblMasterDetail] ([SystemSourceCode], [BusinessSourceCode], [PRODUCERMASTERID], [PRODUCERCONSOLIDATEDID], [ProducerConsolidatedName], [GWP], [PRODUCERNATIONALCODE], [FINMISNATIONALCODE], [PRODUCERNAME], [Update]) VALUES (@SystemSourceCode, @BusinessSourceCode, @PRODUCERMASTERID, @PRODUCERCONSOLIDATEDID, @ProducerConsolidatedName, @GWP, @PRODUCERNATIONALCODE, @FINMISNATIONALCODE, @PRODUCERNAME, @Update);" 
    DeleteCommand="DELETE FROM [tblMasterDetail] WHERE [MasterID] = @original_MasterID AND (([SystemSourceCode] = @original_SystemSourceCode) OR ([SystemSourceCode] IS NULL AND @original_SystemSourceCode IS NULL)) AND (([BusinessSourceCode] = @original_BusinessSourceCode) OR ([BusinessSourceCode] IS NULL AND @original_BusinessSourceCode IS NULL)) AND (([PRODUCERMASTERID] = @original_PRODUCERMASTERID) OR ([PRODUCERMASTERID] IS NULL AND @original_PRODUCERMASTERID IS NULL)) AND (([PRODUCERCONSOLIDATEDID] = @original_PRODUCERCONSOLIDATEDID) OR ([PRODUCERCONSOLIDATEDID] IS NULL AND @original_PRODUCERCONSOLIDATEDID IS NULL)) AND (([ProducerConsolidatedName] = @original_ProducerConsolidatedName) OR ([ProducerConsolidatedName] IS NULL AND @original_ProducerConsolidatedName IS NULL)) AND (([GWP] = @original_GWP) OR ([GWP] IS NULL AND @original_GWP IS NULL)) AND (([PRODUCERNATIONALCODE] = @original_PRODUCERNATIONALCODE) OR ([PRODUCERNATIONALCODE] IS NULL AND @original_PRODUCERNATIONALCODE IS NULL)) AND (([FINMISNATIONALCODE] = @original_FINMISNATIONALCODE) OR ([FINMISNATIONALCODE] IS NULL AND @original_FINMISNATIONALCODE IS NULL)) AND (([PRODUCERNAME] = @original_PRODUCERNAME) OR ([PRODUCERNAME] IS NULL AND @original_PRODUCERNAME IS NULL)) AND (([Update] = @original_Update) OR ([Update] IS NULL AND @original_Update IS NULL))" 
    ConflictDetection="CompareAllValues">
    <DeleteParameters>
        <asp:Parameter Name="original_MasterID" />
        <asp:Parameter Name="original_SystemSourceCode" />
        <asp:Parameter Name="original_BusinessSourceCode" />
        <asp:Parameter Name="original_PRODUCERMASTERID" />
        <asp:Parameter Name="original_PRODUCERCONSOLIDATEDID" />
        <asp:Parameter Name="original_ProducerConsolidatedName" />
        <asp:Parameter Name="original_GWP" />
        <asp:Parameter Name="original_PRODUCERNATIONALCODE" />
        <asp:Parameter Name="original_FINMISNATIONALCODE" />
        <asp:Parameter Name="original_PRODUCERNAME" />
        <asp:Parameter Name="original_Update" />
    </DeleteParameters>
    <FilterParameters>
        <asp:ControlParameter ControlID="cboConsolidatedProducer" 
            Name="ProducerConsolidatedID" PropertyName="SelectedValue" 
            DefaultValue="" ConvertEmptyStringToNull="true" />
        <asp:ControlParameter ControlID="cboBusinessSource" Name="BusinessSourceCode" 
            PropertyName="SelectedValue" ConvertEmptyStringToNull="true" 
            DefaultValue=" " />
        <asp:ControlParameter ControlID="txtSearch" DefaultValue=" " Name="ProducerName" 
            PropertyName="Text" Type="String" />
    </FilterParameters>

    <InsertParameters>
        <asp:Parameter Name="SystemSourceCode" />
        <asp:Parameter Name="BusinessSourceCode" />
        <asp:Parameter Name="PRODUCERMASTERID" />
        <asp:Parameter Name="PRODUCERCONSOLIDATEDID" />
        <asp:Parameter Name="ProducerConsolidatedName" />
        <asp:Parameter Name="GWP" />
        <asp:Parameter Name="PRODUCERNATIONALCODE" />
        <asp:Parameter Name="FINMISNATIONALCODE" />
        <asp:Parameter Name="PRODUCERNAME" />
        <asp:Parameter Name="Update" />
    </InsertParameters>

</asp:SqlDataSource>
    <asp:SqlDataSource ID="ConsolidatedProducer" runat="server" 
        ConnectionString="<%$ ConnectionStrings:BMBESQLConnectionString %>" 

        SelectCommand="SELECT DISTINCT ProducerConsolidatedName, ProducerConsolidatedID FROM tblProducerConsolidated WHERE (MakeConsolidated = 1) ORDER BY ProducerConsolidatedName" 
        CancelSelectOnNullParameter="False">
    </asp:SqlDataSource>

<asp:Button ID="cmdReset" runat="server" onclick="cmdReset_Click" 
    Text="Reset" />

    <br />
    <br />

</div>
<br />
<asp:Button ID="cmdRelinkTo" runat="server" Text="Relink" 
    onclick="cmdRelinkTo_Click" />
<asp:Button ID="cmdUnlink" runat="server" Text="Unlink" 
    onclick="cmdUnlink_Click" />
<asp:Label ID="lblRelinkToConsolidatedProducer" runat="server" 
    Text="Relink To:" Visible="False"></asp:Label>
<asp:DropDownList ID="cboRelinkToConsolidatedProducer" runat="server" 
    AutoPostBack="True" DataSourceID="ConsolidatedProducer" 
    DataTextField="ProducerConsolidatedName" 
    DataValueField="ProducerConsolidatedID" Height="22px" 
    onselectedindexchanged="cboRelinkToConsolidatedProducer_SelectedIndexChanged" 
    Visible="False" Width="259px">
</asp:DropDownList>
<br />
<asp:Button ID="cmdRelink" runat="server" onclick="cmdRelink_Click" 
    Text="Relink" Visible="False" />
<asp:TextBox ID="txtRelinkToConsolidatedProducerID" runat="server" 
    Visible="False"></asp:TextBox>
<asp:TextBox ID="txtRelinkToConsolidatedProducerName" runat="server" 
    Visible="False"></asp:TextBox>
<br />
<asp:Button ID="cmdUncheckAll" runat="server" onclick="cmdUncheckAll_Click" 
    Text="Clear" Height="26px" Width="54px" />
<asp:Button ID="cmdRefresh" runat="server" onclick="cmdRefresh_Click" 
    Text="Refresh" />
<br />
<br />
<asp:Label ID="lblRecordsFound" runat="server" style="color: #000000" Text="-"></asp:Label>
<br />
<br />
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
    AllowSorting="True" AutoGenerateColumns="False" 
    DataSourceID="MasterDetail"
    onrowupdating="GridView1_RowUpdating"
    Width="1243px" EmptyDataText="-"
    DataKeyNames="MasterID">
    <Columns>
        <asp:HyperLinkField DataNavigateUrlFields="MasterID" 
            DataNavigateUrlFormatString="ProducerDetail.aspx?masterid={0}" Text="View" />
        <asp:TemplateField HeaderText="Update" SortExpression="Update">
            <EditItemTemplate>
                <asp:CheckBox ID="Update" runat="server" Checked='<%# Bind("Update") %>' 
                    AutoPostBack='<%# Bind("Update") %>' />
            </EditItemTemplate>
            <ItemTemplate>
                <asp:CheckBox ID="chkUpdate" runat="server" Checked='<%# Bind("Update") %>' 
                    AutoPostBack='<%# Bind("Update") %>' />
            </ItemTemplate>
            <HeaderStyle HorizontalAlign="Center" />
        </asp:TemplateField>
        <asp:BoundField DataField="MasterID" HeaderText="ID" 
            InsertVisible="False" ReadOnly="True" SortExpression="MasterID" />
        <asp:BoundField DataField="SystemSourceCode" HeaderText="System" 
            ReadOnly="True" SortExpression="SystemSourceCode" />
        <asp:BoundField DataField="BusinessSourceCode" HeaderText="Source" 
            ReadOnly="True" SortExpression="BusinessSourceCode" />
        <asp:BoundField DataField="PRODUCERNAME" HeaderText="Producer Name" 
            ReadOnly="True" SortExpression="PRODUCERNAME" >
        <ControlStyle Width="100px" />
        </asp:BoundField>
        <asp:BoundField DataField="GWP" 
            HeaderText="GWP" SortExpression="GWP" DataFormatString="{0:c}" 
            ReadOnly="True" ApplyFormatInEditMode="True" />
        <asp:BoundField DataField="PRODUCERMASTERID" HeaderText="Producer Master ID" 
            ReadOnly="True" SortExpression="PRODUCERMASTERID" >
        <ControlStyle Width="100px" />
        </asp:BoundField>
        <asp:TemplateField HeaderText="Consol. ID" 
            SortExpression="PRODUCERCONSOLIDATEDID">
            <EditItemTemplate>
                <asp:TextBox ID="txtConsolidatedProducerID" runat="server" 
                    Text='<%# Bind("PRODUCERCONSOLIDATEDID") %>' AutoPostBack="True" CausesValidation="True"></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:TextBox ID="ConsolidatedProducerID" runat="server" 
                    Text='<%# Bind("PRODUCERCONSOLIDATEDID") %>' AutoPostBack="True" CausesValidation="True"></asp:TextBox>
            </ItemTemplate>
            <ControlStyle Width="100px" />
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Consol. Name" 
            SortExpression="PRODUCERCONSOLIDATEDID">
            <EditItemTemplate>
                <asp:TextBox ID="txtConsolidatedProducerName" runat="server" 
                    Text='<%# Bind("ProducerConsolidatedName") %>' AutoPostBack="True" CausesValidation="True"></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:TextBox ID="ConsolidatedProducerName" runat="server" 
                    Text='<%# Bind("ProducerConsolidatedName") %>' AutoPostBack="True" CausesValidation="True"></asp:TextBox>
            </ItemTemplate>
            <ControlStyle Width="100px" />
        </asp:TemplateField>
        <asp:BoundField DataField="PRODUCERNATIONALCODE" 
            HeaderText="Source Code" 
            SortExpression="PRODUCERNATIONALCODE" ReadOnly="True" />
        <asp:BoundField DataField="FINMISNATIONALCODE" HeaderText="FINMIS Code" 
            ReadOnly="True" SortExpression="FINMISNATIONALCODE" />
    </Columns>
</asp:GridView>
<asp:Label ID="lblUpdatedRecords" runat="server" EnableViewState="False"></asp:Label>
<br />
<br />
</form>

所有其他功能都工作 - 这是唯一未解决的问题。任何指导表示赞赏。

4

3 回答 3

6

您正在使用缓存,SqlDataSource这就是为什么它会在您的DataBind.

从您的标记:

<asp:SqlDataSource ID="MasterDetail" ... EnableCaching="True"

尝试对显式刷新按钮进行以下更新:

protected void cmdRefresh_Click(object sender, EventArgs e)
{
    MasterDetail.EnableCaching = false;
    GridView1.DataBind();
    MasterDetail.EnableCaching = true;
}
于 2013-03-07T17:38:50.277 回答
1

我从一个帖子中得到它,尽管它没有指定更多内容。试试这个。

 protected void GridView1_Init(object sender, EventArgs e)
 {
     Response.CacheControl = "no-cache";
 }

注意:不需要对标记做任何事情。

于 2013-03-07T15:38:07.367 回答
0

我不知道这是否是最好的方法,但更新后对我来说效果很好。单击更新按钮后,我再次编写SqlDataSource.SelectCommand以选择我需要的数据。我的代码:

protected void teamSubmitBTN_Click(object sender, EventArgs e)
{
    ExpScheduleClass ESCU = new ExpScheduleClass();
    ESCU.updateTeamTable(teamLBL.Text, courseLBL.Text, studentLBL.Text);
    SqlDataSource1.SelectCommand = //your select cmd here...


}
于 2015-06-03T23:21:07.533 回答