简体   繁体   中英

Refresh GridView after update

Basically, the GridView is not showing the updated values after the update event occurs. I have searched the forum and seen many solutions but nothing has worked when I tried them out.

The database is definitely updated but the updates are only visible once I restart the project.

What I have done:

  • Very liberal use of GridView1.Databind();
  • Conservative use of GridView1.Databind();
  • Page_Load contains (!IsPostBack) wrapper with GridView1.Databind();
  • Placed GridView1.Databind(); in the GridView1_RowUpdating event.
  • ...and a number of other things that I tried after searching the forum.

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();
}

}

Markup:

<%@ 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>

All other functions work - this is the only outstanding issue. Any guidance is appreciated.

You are using caching on the SqlDataSource which is why it is showing you the initial Select result on your DataBind .

From your markup:

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

Try making the following update to your explicit refresh button:

protected void cmdRefresh_Click(object sender, EventArgs e)
{
    MasterDetail.EnableCaching = false;
    GridView1.DataBind();
    MasterDetail.EnableCaching = true;
}

I got it from a post, though it doesn't specify anything more. Try this out.

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

Note: No need to do anything on the markup.

I dont know if its the best way but it working fine for me after the update. After the click on the update button I wrote again the SqlDataSource.SelectCommand to select the data I need. My code:

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...


}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM