gridview на странице не обновится, даже при повторном вызове databind - PullRequest
2 голосов
/ 08 февраля 2012

Все исследования, которые я провел, по-видимому, указывают на то, что если я просто снова вызову DataBind (), то мой gridview будет обновлен.Это только кажется, что если я отлаживаю и перебираю свой код, gridview прекрасно обновляется.Однако, если я не перешагиваю свой код во время работы приложения в режиме отладки, приведенный ниже метод btnFileImport_Click не обновляет мой gridview.Может ли это быть связано с тем, что я обновляю данные, которые использует gridview, загружая файл с помощью пакета служб SSIS?Ниже приведен код:

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 голосов
/ 09 февраля 2012

После долгих ударов головой о стол я наконец наткнулся на ответ окольным путем.

Мои методы SQL_IsJobRunning и SQL_JobSucceeded используют sp_help_job в SQL, чтобы выяснить, выполняется ли еще задание и успешно ли оно выполнено. Я работал над сообщениями об успехе / ошибках, которые отображались на моем ярлыке, и когда я получал неправильные сообщения, я понял, что «current_execution_status» показывает, что работа была выполнена, но «last_run_outcome» еще не был обновлен к тому времени, когда мой Код искал значение. Поэтому я поставил паузу (Thread.Sleep (4000)) между этими двумя методами, чтобы дать базе данных шанс зарегистрировать last_run_outcome до того, как я его проверил.

Это решило мою проблему с сообщением об ошибке метки и имело приятный побочный эффект, также решив мою проблему с 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."; 
        }
0 голосов
/ 09 февраля 2012

Я бы предложил поместить вашу сетку в панель обновлений.Похоже, когда вы нажимаете кнопку, страница не обновляется в обратной передаче, поэтому сетка не ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...