2012-05-02 5 views
0

だからここに状況があります。フォームがrunat = serverになっていても、フォームrunat = serverエラーを出力するためにGridviewの内容をエクスポートする

私は、GridviewのコンテンツをExcelシートにエクスポートしています。基本的には、メソッドを呼び出すボタンがあります(例:btnExcel_Clicked)。後ろのC#コードボタン火災は、それがエラーを示す場合、そのような

protected void btnExcel_Click (object sender, EventArgs e) 
{ 
    Response.Clear(); 
    Response.AddHeader("content-disposition", "attachment; filename=" + "test" + "_Registration_Forms.xls"); 
    Response.Charset = ""; 
    Response.ContentType = "application/vnd.ms-excel"; 
    Page.EnableViewState = false; 

    System.IO.StringWriter stringWrite = new System.IO.StringWriter(); 
    System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); 

    clientGridView.RenderControl(htmlWrite); //this is the name of my gridview 

    Response.Write(stringWrite.ToString()); 
    Response.End(); 
} 

通りである:

「System.Web.HttpException:タイプの制御 『clientGridView』 『はGridViewの』内部に配置する必要がありますrunat = serverを持つフォームタグ」を参照してください。

エラーが発生した場所を次のコードであることを示している:私のフォームは確かにその中にrunat =「server」を持っていない場合

Line 217:  clientGridView.RenderControl(htmlWrite); 

は、なぜこれがでしょうか?

私はこのページをどのように使用しているのかと思われますが、gridviewは更新パネルでラップされています(問題が発生するかどうかはわかりません)。ページ上部にいくつかのjavascriptがありますページが各検索クエリをリフレッシュできるようにします。それはそうのようになります。これは、基本的にはちょうど私の更新パネルの毎回の発射

<script type="text/javascript"> 
    function RefreshUpdatePanel() { 
     __doPostBack('<%= txtClientName.ClientID %>', ''); 
     $('#totals').fadeIn('slow'); 
     $('#clientGrid').fadeIn('slow'); 
     $('#btnReport').fadeIn('slow'); 
    }; 
</script> 

私はこれのどれかがこのようなエラーの原因になるかわからないtxtClientName

に値を入力します。もし誰かがこれについて少しの光を当てたり、正しい方向に私を導くことができたら、私は素晴らしいだろう。これは、私のgridviewが更新パネル内に配置されているためですか? arghhhh ..

ありがとうございます!

EDIT:ok最初の問題は解決しましたが、新しい問題が発生しました。後ろの私のコードにこのコードを配置することによって

は:

public override void VerifyRenderingInServerForm (System.Web.UI.Control control) 
{ 
    //confirms that an HtmlForm control is rendered for the 
    //specified ASP.NET server control at run time. 
} 

私はそのエラーを乗り越えることができ、しかし、新しいエラーが発生した:

System.InvalidOperationException: RegisterForEventValidation can only be called during  Render(); 

フン。

編集2: よく問題が解決しました。 @ PageセクションにEnableEventValidation = "false"と入力すると、これは正しく機能します。しかし、これは今、安全ではないのですか?

編集3: また、Excelでセルの枠線を失うことなくこれを達成する方法がありますか?

答えて

1

私はこれが直接あなたのレンダリングの問題をANSERしません知っているが、あなたのデータグリッドをデータセットにバインドされている場合、なぜ、このようなこの問題の受け入れANSERような方法を使用してデータセットから直接それをエクスポートしません:

Export DataTable to Excel File

更新

あなたは簡単にSqlDataAdapterオブジェクトを使用して1を生成し、そのようなデータセットを埋めることができますセットしていない場合:

var dataAdapter = new SqlDataAdapter("Select * From table", 
"Data Source=MySQLServerName;Initial Catalog=DatabaseName;Integrated Security=True"); 

     var dataset = new DataSet(); 

     dataAdapter.Fill(dataset); 

アップデート2

あなたのデータソースからSqlCommandオブジェクトのテキストを使用したい場合は、この操作を行うことができます。

var dataAdapter = new SqlDataAdapter(mySqlDatasource.SelectCommand, 
    "Data Source=MySQLServerName;Initial Catalog=DatabaseName;Integrated Security=True"); 
+0

私は(データセットにバインドされた)このことについてあまり精通していませんよ。私はsqldatasourceを取るグリッドビューを持っていて、それを使ってgridview内のセルにデータを設定します。どのような方法でもデータセットを作成する必要はありませんでした。この例を見ると、「dt」の起源についてはわかりません。私はcity.getAllCity()が作られているカスタムメソッドだと仮定しています。私はこれにもどのようにアプローチするかはわかりません。しかし、私はこのプロセスを学んでいないと思いますが、実際には何が起こっているのか分かりません。 – zillaofthegods

+0

データセット生成の更新例# – Richard

+0

優秀!あなたの指導に感謝します。 sqldatasourceをSqlDataAdapterに挿入できますか?ユーザーが入力した結果に基づいて多数のクエリを生成しています。その結果、静的なSQLクエリ/非クエリのみを使用することはできません。 – zillaofthegods

関連する問題