asp.Net excelテーブルをエクスポートした後、ボタンページコントロールが無効になっても使用できず、反応しない解決策です.
5002 ワード
ページがexcelをエクスポートした後、仕方なく別の問題に直面しました.
つまりexcelテーブルをエクスポートした後にページの上のすべてのボタンのクリックはすべて反応していないで、再びロードする必要があります
ページにexcelコードをエクスポートするには、次の手順に従います.
最初は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、ボタンでメソッドリセットを呼び出します
このパラメータの値は、システムがページを取得するまでデフォルトでコミットされていません.
つまり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、ボタンでメソッドリセットを呼び出します
このパラメータの値は、システムがページを取得するまでデフォルトでコミットされていません.