即使再次调用数据绑定,页面上的gridview也不会刷新

时间:2012-02-08 19:27:21

标签: c# asp.net gridview data-binding

我所做的所有研究似乎表明,如果我再次调用DataBind(),那么我的gridview将会更新。如果我正在调试并单步执行代码,这似乎就是这种情况,gridview刷新正常。但是,如果我在调试模式下运行应用程序时没有单步调试我的代码,则下面的btnFileImport_Click方法不会刷新我的gridview。它是否与我通过使用SSIS包加载文件来更新gridview使用的数据这一事实有什么关系?下面是代码隐藏:

namespace InternationalWires
{
    public partial class Default_Corporate : System.Web.UI.Page
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["InternationalWiresConnection"].ToString());
        SqlCommand cmd = null;
        SqlServerAgent sqlAgent = new SqlServerAgent();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindRatesGrid();
            }
        }

        public void BindRatesGrid()
        {
            conn = new SqlConnection(ConfigurationManager.ConnectionStrings["InternationalWiresConnection"].ToString());
            SqlDataAdapter da = new SqlDataAdapter("spGetRates", conn);
            da.SelectCommand.CommandType = CommandType.StoredProcedure;
            DataSet ds = new DataSet();
            da.Fill(ds);
            grdRates.DataSource = ds.Tables[0].DefaultView;
            grdRates.DataBind();
        }

        protected void btnFileImport_Click(object sender, EventArgs e)
        {
            // Get the filename and path from the user.  Must be in UNC format or SSIS will fail
            string filename = Path.GetFullPath(fileSelect.PostedFile.FileName);

            // Update the settings table to the value from above
            try
            {
                conn = new SqlConnection(ConfigurationManager.ConnectionStrings["InternationalWiresConnection"].ToString());
                cmd = new SqlCommand("UPDATE Settings SET settingValue = '" + filename + "' WHERE settingName = 'SSISRatesImportFile'", conn);
                conn.Open();
                cmd.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                // TO DO: handle exceptions
            }
            finally 
            {
                if (conn != null) conn.Dispose();
                if (cmd != null) cmd.Dispose();
            }

            // set the name of the ssis package to run
            sqlAgent.SSISName = ConfigurationManager.AppSettings["ratesImportPackage"].ToString();

            // start the job
            sqlAgent.SQL_SSISPackage();

            // do nothing while waiting for job to finish
            while (sqlAgent.SQL_IsJobRunning())
            { }

            if (sqlAgent.SQL_JobSucceeded())
            { 
                lblStatus.Text = "Import Succeeded";
                BindRatesGrid();
            }
            else
            { 
                lblStatus.Text = "Import Failed.  Please contact IT for failure details on SSIS import package."; 
            }

        }
    }
}

2 个答案:

答案 0 :(得分:0)

我建议将您的网格放入更新面板。看起来当你点击按钮时,页面不会在回发中刷新,因此网格不是......

答案 1 :(得分:0)

在桌子上敲了很多头之后,我终于以迂回的方式偶然发现了答案。

我的SQL_IsJobRunning和SQL_JobSucceeded方法在SQL中使用sp_help_job来确定作业是否仍在运行,以及它是否成功。我正在处理成功/错误消息以显示在我的标签中,当我收到错误消息时,我意识到'current_execution_status'显示作业已完成,但'last_run_outcome'尚未更新到我的标签时代码正在看价值。所以我在两个方法之间放了一个暂停(Thread.Sleep(4000)),让数据库有机会在我检查之前记录last_run_outcome。

这解决了我的标签错误消息问题,并且还有解决我的gridview问题的令人愉快的副作用。暂停到位后,gridview也会成功更新。必须有一些事情发生得太快,以至于gridview无法正确更新。我只是希望我知道什么。在数据库中提交数据之前,可能正在运行BindRatesGrid()方法。

        // do nothing while waiting for job to finish
        while (sqlAgent.SQL_IsJobRunning())
        { }

        Thread.Sleep(4000);

        if (sqlAgent.SQL_JobSucceeded())
        { 
            lblStatus.Text = "Import Succeeded";
            BindRatesGrid();
        }
        else
        { 
            lblStatus.Text = "Import Failed.  Please contact IT for failure details on SSIS import package."; 
        }