asp.Net excelテーブルをエクスポートした後、ボタンページコントロールが無効になっても使用できず、反応しない解決策です.

5002 ワード

ページがexcelをエクスポートした後、仕方なく別の問題に直面しました.
つまりexcelテーブルをエクスポートした後にページの上のすべてのボタンのクリックはすべて反応していないで、再びロードする必要があります
 
ページにexcelコードをエクスポートするには、次の手順に従います.
public void DataTableToExcel(DataTable dt,string filename)

        {

            if (dt != null & dt.Rows.Count > 0)

            {

                Response.Clear();

                Response.Buffer = true;

                //Response.Charset = "utf-8";

                Response.ContentEncoding = System.Text.Encoding.Default;

                Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(filename, Encoding.Default).ToString());

                Response.ContentType = "application/vnd.ms-excel";

                this.EnableViewState = false;

                StringWriter oStringWriter = new StringWriter();

                HtmlTextWriter oHtmlTextWriter = new HtmlTextWriter(oStringWriter);

                Response.Write(style);

                DataGrid ExcelDG = new DataGrid();



                ExcelDG.DataSource = dt; 

                ExcelDG.DataBind();

                ExcelDG.RenderControl(oHtmlTextWriter);

                Response.Write(oStringWriter.ToString());

                Response.End();

            }

        }

 
最初はresponseのヘッダ属性のせいかresponseだと思っていました.Writeという方法の問題
何度も検索した結果、responseによるものであることが分かった.end()のせいで
すべては1つの方法を書くだけでrefresh()をpage_に置きますloadで問題が解決しました.
VB.NETこれはC#のコードによって書き換えられたStringBuilderを使用しています.
sub refresh()
       Dim beforeSubmitJS As StringBuilder = New StringBuilder()
        beforeSubmitJS.Append("var exportRequested = false;"& vbCrLf)        beforeSubmitJS.Append("var beforeFormSubmitFunction = theForm.onsubmit;"& vbCrLf)        beforeSubmitJS.Append("theForm.onsubmit = function(){ "& vbCrLf)        beforeSubmitJS.Append("var returnVal = beforeFormSubmitFunction();"& vbCrLf)        beforeSubmitJS.Append("if(exportRequested && returnVal) {_spFormOnSubmitCalled=false; exportRequested=false;}"& vbCrLf)        beforeSubmitJS.Append("return returnVal;"& vbCrLf)        beforeSubmitJS.Append("}; "& vbCrLf)
        Me.Page.ClientScript.RegisterStartupScript(Me.GetType(), "alterFormSubmitEvent", beforeSubmitJS.ToString(), True)
        Me.btnClose.Attributes("onclick") = "javascript:exportRequested=true;"        Me.btnSave2Excel.Attributes("onclick") = "javascript:exportRequested=true;"        Me.btnSelect.Attributes("onclick") = "javascript:exportRequested=true;"
end sub
 
C#
 
public void refresh(Button btn) { string beforeSubmitJS = "var exportRequested = false; "; beforeSubmitJS += "var beforeFormSubmitFunction = theForm.onsubmit;"; beforeSubmitJS += "theForm.onsubmit = function(){ "; beforeSubmitJS += "var returnVal = beforeFormSubmitFunction(); "; beforeSubmitJS += "if(exportRequested && returnVal) {_spFormOnSubmitCalled=false; exportRequested=false;} "; beforeSubmitJS += "return returnVal; "; beforeSubmitJS += "}; "; this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alterFormSubmitEvent", beforeSubmitJS, true); btn.Attributes["onclick"] = "javascript:exportRequested=true;"; }
呼び出し例は次のとおりです.
protected void Page_Load(object sender,EventArgs e){refresh(btnExport);//ここでボタンの名前に変更すればいい
}
原理:ページボタンの発行時に組み込みメソッドが呼び出され、組み込み変数が変更されます.spFormOnSubmitCalled、ボタンでメソッドリセットを呼び出します
このパラメータの値は、システムがページを取得するまでデフォルトでコミットされていません.