После Response.Flush () код не работает - PullRequest
0 голосов
/ 26 февраля 2019

Извините, если это слишком абсурдный вопрос.но у меня есть кнопка asp, которая вызывает события.Событие создает таблицу данных и загружает ее как xls.Он работает нормально, я вижу загруженный файл, но я не вижу вид сетки, который я показываю.Кто-нибудь имеет представление об этом.

            Response.ClearContent();
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1254");
            Response.Charset = "windows-1254"; 
            Response.AddHeader("content-disposition", attachment);
            Response.ContentType = "application/xsl";
            string tab = "";
            foreach (DataColumn c in dt.Columns)
            {
                Response.Write(tab + c.ColumnName);
                tab = "\t";
            }

            \\..somethings about writing to file ...

            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.SuppressContent = true; 
            HttpContext.Current.ApplicationInstance.CompleteRequest();

Я попытался создать datatable и импортировать в gridview после response.flush ().Когда я отлаживаю код ниже, он работает нормально.Я вижу переменные в разделе отладки, но gridview по-прежнему не виден.

            Response.ClearContent();
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1254");
            Response.Charset = "windows-1254"; 
            Response.AddHeader("content-disposition", attachment);
            Response.ContentType = "application/xsl";
            string tab = "";
            foreach (DataColumn c in dt.Columns)
            {
                Response.Write(tab + c.ColumnName);
                tab = "\t";
            }

            \\..somethings about writing to file ...

            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.SuppressContent = true; 
            HttpContext.Current.ApplicationInstance.CompleteRequest();
            queryString = textbox.Text.Replace("\r\n", " ").ToString();
            table = connectDatabase(queryString);
            GridView1.DataSource = table;
            GridView1.DataBind();
            if (GridView1.Rows.Count > 0)
            {
                GridView1.Visible = true;
            }

1 Ответ

0 голосов
/ 26 февраля 2019

В вашем случае вам нужно создать новую страницу .aspx, скажем, «download.aspx», где у вас будет код для загрузки, а на главной странице вы можете иметь свой код привязки к сетке, посмотрите приведенный ниже пример.

MainPage.aspx

btnGetData_click()
{
 dt=connectdb(query); 
 GridView1.DataSource = dt; 
 GridView1.DataBind(); 
 GridView1.Visible=true;

 Session("ExcelData") = dt;

 string url = "download.aspx";
 string s = "window.open('" + url + "', 'download_window', 'width=100,height=100,left=100,top=100,resizable=no');";
 ClientScript.RegisterStartupScript(this.GetType(), "script", s, true);

}

download.aspx

page_load()
{
  if(!IsPostBack)
  {
            DataTable dt = (DataTable)Session("ExcelData");
            Response.ClearContent();
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1254");
            Response.Charset = "windows-1254"; 
            Response.AddHeader("content-disposition", attachment);
            Response.ContentType = "application/xsl";
            string tab = "";
            foreach (DataColumn c in dt.Columns)
            {
                Response.Write(tab + c.ColumnName);
                tab = "\t";
            }

            \\..somethings about writing to file ...

            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.SuppressContent = true; 
            HttpContext.Current.ApplicationInstance.CompleteRequest();
  }

}
...